elasticsearch - 带有嵌套字段的 Elasticsearch 插入适用于 Kibana,但不适用于 cURL
问题描述
我正在尝试在 ElasticSearch 中插入一个具有嵌套字段的文档。我通过使用 PUT 命令将字段标记为嵌套来创建索引:
PUT nested_test
{
"mappings": {
"_doc": {
"properties": {
"nested_field": {
"type": "nested"
}
}
}
}
}
现在,我从 Kibana 控制台将数据插入到这个索引中:
POST nested_test/_doc/1234
{
"created_time": "2018-01-01 01:52:53",
"status": "Ok",
"nested_field": [
{
"col4": 0,
"col5": 0,
"col3": 0,
"col1": 3234253,
"col2": 1
},
{
"col5": 0,
"col4": 0,
"col2": 1,
"col1": 34241,
"col3": 2
},
{
"col5": 0,
"col4": 0,
"col2": 1,
"col1": 775756,
"col3": 0
}
]
}
这完美地工作,我能够看到索引中的数据,嵌套字段按预期索引。
但是,如果我在 curl 中使用相同的 json,则会收到错误响应:
"error" : {
"type" : "illegal_argument_exception",
"reason" : "object mapping [nested_field] can't be changed from nested to non-nested"
}
使用的确切 curl 命令是:
curl -XPOST -H 'Content-Type: application/json' http://someurl:9200/nested_test/doc/_bulk?pretty --data-binary @es.json
请注意,我已尝试使用 POST 和 PUT。无法理解为什么相同索引上的相同 json 适用于 Kibana 但不适用于 cURL。任何帮助,将不胜感激。谢谢。
解决方案
我看到了问题。在您的映射中,您正在定义_doc
映射类型,但您doc
在 curl 中使用。以下卷曲应该可以工作:
curl -XPOST -H 'Content-Type: application/json' http://someurl:9200/nested_test/_doc/_bulk?pretty --data-binary @es.json
推荐阅读
- tensorflow - 是否可以创建自定义 Tensorflow GRU/LSTM 单元?
- ios - 在许多视图控制器中使用相同的 UIActivityIndicatorView
- c - 我正在尝试打印电话号码,但出现错误
- javascript - 将其余参数合并到一个新对象中并返回
- java - UseContainerSupport VM 参数有什么作用?
- python - 如何纠正返回字符串中子字符串数量的代码?
- java - Android 内容提供商返回错误的联系人 ID
- android - 在片段中使用毕加索
- c# - 创建虚拟智能卡 - '未找到元素。(来自 HRESULT 的异常:0x80070490)'
- ios - ios cloudkit接口有插件吗