开发者社区 问答 正文

扩展Elasticsearch文档中的列表字段

我的elasticsearch索引文档中有user_data字段,例如;

样本文档:

user_data : [
             {
                 userid :1,
                 order_id :32
             },
             {
                 userid :8,
                 order_id : 99
             }
         ]

我的内存中还有另一组要扩展的用户数据(将列表添加到列表)

内存中的数据:

preserved_user_data : [
                 {
                     userid :991,
                     order_id :89
                 },
                 {
                     userid :89,
                     order_id :76
                 }
           ]

我想将该文档更新为:

user_data : [
             {
                 userid :1,
                 order_id :32
             },
             {
                 userid :8,
                 order_id : 99
             },
             {
                 userid :991,
                 order_id :89
              },
             {
                 userid :89,
                 order_id :76
             }
            ]

我已经尝试使用脚本ctx._source.user_data + = params.preserved_user_data,但是它使文档的字段为空数组。

PS:我正在使用op类型通过并行批量执行此操作:在ES 7.1.1上更新

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 15:54:51 669 分享 版权
1 条回答
写回答
取消 提交回答
  • 使用更新脚本将数组追加到文档中的数组的示例查询

    查询:

    POST index35/_update/tg8DwHAB4HO3_VSZUdzR
    {
      "script": {
        "lang": "painless",
        "inline": "if(!ctx._source.containsKey('user_data')){ctx._source['user_data']=[]} for(int i=0;i<params.data.length;i++){ctx._source.user_data.add(params.data[i])}",
        "params": {
          "data": [
            {
              "userid": 991,
              "order_id": 89
            },
            {
              "userid": 89,
              "order_id": 76
            }
          ]
        }
      }
    }
    

    结果:

       "hits" : [
          {
            "_index" : "index35",
            "_type" : "_doc",
            "_id" : "tg8DwHAB4HO3_VSZUdzR",
            "_score" : 1.0,
            "_source" : {
              "user_data" : [
                {
                  "userid" : 1,
                  "order_id" : 32
                },
                {
                  "userid" : 8,
                  "order_id" : 99
                },
                {
                  "userid" : 991,
                  "order_id" : 89
                },
                {
                  "userid" : 89,
                  "order_id" : 76
                }
              ]
            }
          }
        ]
      }
    

    回答来源:stackoverflow

    2020-03-24 15:55:01
    赞同 展开评论