首页 > 解决方案 > 带有嵌套字段的 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。任何帮助,将不胜感激。谢谢。

标签: elasticsearchcurlkibana

解决方案


我看到了问题。在您的映射中,您正在定义_doc映射类型,但您doc在 curl 中使用。以下卷曲应该可以工作:

curl -XPOST -H 'Content-Type: application/json'  http://someurl:9200/nested_test/_doc/_bulk?pretty --data-binary @es.json

推荐阅读