当前位置: 首页 > 面试题库 >

ES是否支持将新项目添加到现有文档的嵌套字段中?

洪飞驰
2023-03-14
问题内容

我有这样的ES文档。

{
  "title": "Nest eggs",
  "comments": [ 
{
  "name":    "John Smith",
  "comment": "Great article",
},
{
  "name":    "Alice White",
  "comment": "More like this please",
}
]
}

现在我想在此文档中添加一个新的“注释”,最后该文档将是

{
   "title": "Nest eggs",
   "comments": [ 
{
  "name":    "John Smith",
  "comment": "Great article",
},
{
  "name":    "Alice White",
  "comment": "More like this please",
},
{
  "name":    "New guy",
  "comment": "something here",
}
]
}

我不想在每次追加过程中都提供现有的“ comments”对象,因此最好是每次向此嵌套字段添加新对象的最佳方法。

我的解决方案:

 POST test_v2/_update/Z_nM_2wBjkGOA-r6ArOb
 {
  "script": {
  "lang": "painless",
  "inline": "ctx._source.nested_field.add(params.object)",
  "params": {
     "object": {
        "model" : "tata nano",
        "value" : "2"
     }
  }
 }
}

问题答案:

检查脚本本身中的空字段。如果该字段不存在,则首先创建

 POST test3/_update/30RaAG0BY3127H1HaOEv
{
  "script": {
    "lang": "painless",
    "inline": "if(!ctx._source.containsKey('comments')){ctx._source['comments']=[]}ctx._source.comments.add(params.object)",
    "params": {
      "object": {
        "model": "tata nano",
        "value": "2"
      }
    }
  }
}


 类似资料:
  • 我有一个类似这样的mongoDocument结构,注释字段作为嵌入文档。 我想添加 “newField” : “something” 到 嵌入的注释字段中 “cid” : “17426944” : 在java驱动程序中,我尝试了: 这里的问题是: 示例文档: 我需要什么 : 请帮帮我,谢谢vijay

  • 我使用的是ELK 7.12。 我的外部json: Elasticsearch文档: 预期产出: Logstash管道: 错误: 我尝试了其他SO文章中的一些组合,以在事件中添加嵌套字段,但管道未能执行。请给我提供正确的语法。我的学习参考是这个。 编辑1: 根据leandrojmp的注释,的结果是: 在研究映射概念之后,我删除了索引并成功地重新执行了管道 现在的问题是,仅更新两个查询匹配文档中的一个

  • 我想计算两个字段的总和,然后在文档中创建新的字段,比如:“total sum”。但我不知道怎么做。都在MongoDB中。这里有一个例子:

  • 我想定义一个$Project聚合阶段,在这里我可以指示它添加一个新字段并包括所有现有字段,而不必列出所有现有字段。 在这种情况下,我是否可以使用类似“包括所有字段”的关键字,或者其他方法来避免单独列出每个字段?

  • 我是Elasticsearch的新手,我提出了一个问题,Elasticsearch嵌套查询是否只能为嵌套字段返回匹配的嵌套文档。 对于示例,我有一个名为的类型,其中嵌套字段名为 和嵌套查询 我需要的是搜索有提到足球的评论的博客文章,每个博客文章的评论数与足球相匹配(在例子中它数为1,因为另一个评论刚刚提到篮球)。 然而,Elasticsearch似乎总是返回完整的文档,所以我如何才能实现它,或者我