当前位置:  开发笔记 > 前端 > 正文

在弹性搜索中使用嵌套数组更新字段

如何解决《在弹性搜索中使用嵌套数组更新字段》经验,为你挑选了1个好方法。

我试图用数组更新文档中的字段.我想在"产品"字段中添加一个数组.我试过这个:

POST /index/type/1/_update
{
    "doc" :{
       "products": [
         {
           "name": "A",
           "count": 1
         },
         {
           "name": "B",
           "count": 2
         },
         {
           "name": "c",
           "count": 3
         }
       ]
    }
}

这是我尝试运行代码时得到的错误响应:

{
   "error": {
      "root_cause": [
         {
            "type": "mapper_parsing_exception",
            "reason": "failed to parse [products]"
         }
      ],
      "type": "mapper_parsing_exception",
      "reason": "failed to parse [products]",
      "caused_by": {
         "type": "illegal_state_exception",
         "reason": "Can't get text on a START_OBJECT at 1:2073"
      }
   },
   "status": 400
}

谁知道我做错了什么?



1> mshabeeb..:

消息"无法在START_OBJECT上获取文本"意味着Elasticsearch期望输入"string"类型但您尝试将对象作为输入.

如果你检查Kibana,你会发现那里存在"产品"字段,并被定义为字符串.但是,由于您正在输入字典列表,因此字段"产品"应该从头开始定义为对象(最好使用动态字段).一个例子是(参见https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html上的完整示例)

    "products": { 
      "dynamic": true,
      "properties": {}
    }

但是,由于您已经拥有索引,因此无法更改映射,因此您需要删除索引,事先执行映射,然后执行更新.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有