Elasticsearch 更新嵌套对象

标签 elasticsearch nested

我在互联网上发现了同样的问题,但我不明白解决方案。 问题是,我如何更新 Nestend 文档而不更新所有数组。非常感谢。

这是一个嵌套文档

"links": [
  [
    {
      "note_link_id": "1",
      "user_id": "11",
      "creation": "2016-11-15T11:21:10",
      "modification": "2016-11-15T13:38:04",
      "to_asset": "100",
      "from_asset": "99",
      "comment": "Comment 1."
    },
    {
      "note_link_id": "2",
      "user_id": "11",
      "creation": "2016-11-15T13:37:04",
      "modification": "2016-11-15T13:37:27",
      "to_asset": "101",
      "from_asset": "99",
      "comment": "Comment 2."
    },
    {
      "note_link_id": "3",
      "user_id": "11",
      "creation": "2016-11-15T14:01:27",
      "modification": "2016-11-15T14:02:52",
      "to_asset": "102",
      "from_asset": "99",
      "comment": "Comment 3."
    }
  ]
],

问题:我如何更新“note_link_id”:“2”并仅更新评论 “评论2”到“blja blja blja”

我重复一遍,如何更新这个数组而不更新所有字段,例如 “note_link_id”:“1”,“note_link_id”:“2”和“note_link_id”:“3”

谢谢

最佳答案

您可以尝试使用部分更新和一些脚本语言。该脚本看起来或多或少(这里是 groovy)类似于:

if (ctx._source.links != null) {
    for (item in ctx._source.links) { 
        if (item.note_link_id == params.link_id_param) {
            item.comment = params.comment_param;
        }
    }
}

然后将脚本与更新 API 一起使用:

POST /index_name/type_name/document_id/_update
{
   "script" : "...",
   "params" : {
      "link_id_param" : "2",
      "comment_param" : "blja blja blja"
   }
}

请记住,Elasticsearch 中的文档是不可变的,因此从技术上讲,整个文档将被重新索引。

关于Elasticsearch 更新嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45234391/

相关文章:

elasticsearch - 如何在Elasticsearch中添加用于故障转移的节点

使用深度名称向量作为索引替换嵌套列表

elasticsearch - Elasticsearch通配符并按查询的精确度对其进行排序

elasticsearch - 在Elasticsearch中使用ngram标记器按部分用户名或名称搜索用户的正确方法

elasticsearch - 使用Mustache API解析Elasticsearch JSON模板请求

javascript - 使用带有嵌套拖拉古拉和切片的句柄

c# - .NET Winforms DataGridView - 任何嵌套方式?

java - 安装 JRE 8 和 Elasticsearch 7.3.1 后没有 jvm.options

mysql - 我有一个 mysql 查询一直在处理但无法使其工作

javascript - 如何在 Angular 2 中展平嵌套的 Observables