【问题标题】:Updating nested object in elastic search在弹性搜索中更新嵌套对象
【发布时间】:2020-07-15 18:35:50
【问题描述】:

问题:我在使用脚本更新 Elastic Search 中的嵌套对象时遇到问题。 我想更新文档的某些部分,以便达到我想要的结果。

以下是示例代码。

  1. 我有以下产品映射
  PUT products
    {
      "mappings": {
          "properties": {
            "category": {
              "type": "nested",
              "properties": {
                "category_code": {
                 "type":  "keyword"
                  },
                 "zaiko": {
                  "type": "integer"
                 },
                 "categories": {
                   "type": "object",
                   "properties": {
                     "category_cd": {
                       "type": "text"
                     },
                     "zaiko": {
                       "type": "integer"
                     }
                   }
                 }
                }
              }
            }
        }
    }
  1. 在上面的映射中插入数据,如下所示

    POST /products/_doc/1
     {
      "category": [{
        "category_code": "201",
        "ziko": 100,
        "categories": {
          "category_code": "20101",
          "zaiko": 50
        }
      }]
    }
    
    POST /products/_doc/2
    {
    "category": [{
     "category_code": "201",
     "ziko": 100,
     "categories": {
      "category_code": "20102",
      "zaiko": 60
    }
    }]}
    
  2. 我想更新嵌套类别对象(Zaiko 字段)并使用下面的脚本

    POST /products/_update_by_query
     {
       "script": {
       "lang": "painless",
       "source": """
        for (int i=0; i < ctx._source.category.length; i++) { 
         if(ctx._source.category[i].categories.category_code == "20101"){
           ctx._source.category[i].categories.zaiko = params.zaiko;
         }
       } 
       """,
       "params": {
         "zaiko": 10
       }
     },
     "query": {
      "nested": {
       "path": "category",
       "query": {
         "bool": {
           "must": [
             {
               "match": {
                 "category.categories.category_cd": "20101"
               }
             }
           ]
         }
       }
      }
     }
    }
    

响应这个查询嵌套类别,zaiko 字段没有更新。 谁能建议我,我们如何使用脚本更新 Elastic Search 中的嵌套对象?

【问题讨论】:

    标签: elasticsearch nested


    【解决方案1】:

    我似乎微不足道,但是如何将最后一个 match 更改为

    "category.categories.category_cd": "20101"
    

    "category.categories.category_code": "20101"
    

    cd --> code

    【讨论】:

    • 感谢您的回答我犯了一个拼写错误。我按照您的建议更正了匹配查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多