es的nested追加

如果您想对一个nested字段进行追加而不是覆盖,则可以使用nested字段的inner_hits功能。

具体来说,您可以使用nested查询来定位到您想要追加数据的特定嵌套文档,然后使用inner_hits来返回该嵌套文档及其所有现有的嵌套文档。接下来,您可以从返回的inner_hits结果中提取现有的数组数据,将新的数据追加到现有数据中,然后使用一个嵌套的更新查询来将更新后的数据写回到Elasticsearch中。

下面是一个示例,它演示了如何使用inner_hits来获取现有数据、追加新数据并将所有数据写回到Elasticsearch中:

```json
POST my_index/_update_by_query
{
  "query": {
    "nested": {
      "path": "my_nested_field",
      "query": {
        "match": {
          "my_nested_field.id": "123"
        }
      },
      "inner_hits": {}
    }
  },
  "script": {
    "source": """
      def nestedDoc = ctx._source.my_nested_field.stream().filter(n -> n.id == params.id).findFirst().orElse(null);
      if (nestedDoc != null) {
        List newValues = params.values + nestedDoc.values;
        ctx._source.my_nested_field.removeIf(n -> n.id == params.id);
        ctx._source.my_nested_field.add([
          "id": params.id,
          "values": newValues
        ]);
      }
    """,
    "params": {
      "id": "123",
      "values": ["new_value_1", "new_value_2"]
    }
  }
}
```

在这个示例中,我们使用了一个更新查询来定位到具有“id”等于“123”的特定嵌套文档。我们使用inner_hits来获取现有的“values”数组,然后将新的值追加到现有的值中。最后,我们使用一个嵌套的更新脚本来写回更新后的数据。

请注意,这只是一个示例代码,您需要根据您的实际数据模型和具体需求来做出相应的调整。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值