当前位置: 首页 > 知识库问答 >
问题:

弹性搜索:如何使用无痛删除对象属性

姬振濂
2023-03-14

想知道是否有人知道为什么这个查询更新运行良好,但即使任务运行到完成并声称所有记录都已更新,也不会删除任何内容?我可以使用相同的语法删除所有人员对象,而不会出现任何问题。为什么 ES 不删除对象属性?

POST /16cf303e902f4445a560a8e9a5b9ea51/_update_by_query?conflicts=proceed&wait_for_completion=false
{
  
  "conflicts": "proceed",
  "query": {
    "exists": {
      "field": "person.hair_color"
    }
  },
  "script": {
    "lang": "painless",
    "source": "ctx._source.remove('person.hair_color');"
  }
}

现在,如果我使用从上述调用返回的ID观看任务

GET/_ tasks/qle uj 8 jqqgopfgse ZL 7 u 9 q:1776664

我得到了这个(简短的版本),声称所有记录都已更新。然而,出于某种原因,所有人的头发仍然是他们的颜色。

{
  "completed" : true,
  "task" : {
    "status" : {
      "updated" : 110345,
     }
}

感谢您的任何指导!

共有1个答案

方绪
2023-03-14

终于明白了!显然_source包含文档中的所有对象。因此,要删除对象属性,需要运行:

POST /16cf303e902f4445a560a8e9a5b9ea51/_update_by_query?conflicts=proceed&wait_for_completion=false
{
  
  "conflicts": "proceed",
  "query": {
    "exists": {
      "field": "person.hair_color"
    }
  },
  "script": {
    "lang": "painless",
    "source": "ctx._source.person.remove('hair_color');"
  }
}

如果任何人都有同样的问题,这是可行的!

 类似资料:
  • 我是ES的新手,我正在尝试使用聚合编写搜索查询。 在写同样的东西时,我面临着无痛脚本的问题。 哪里可以得到完整的无痛脚本文档,用于弹性搜索?

  • 文档建议使用以下函数删除特定索引: 我已经适应了: 但这给了我以下错误: 我找了几个小时都没有结果,有人有什么想法吗?

  • 你能建议如何更新基于条件字段的文档(使用脚本-我猜是无痛的)吗? 其目的是添加/删除文档中的值 所以如果我有这些输入文档: 我想表演这样的东西: 使用以下命令更新具有“flag=true”的所有文档: 添加标签:"me","one" 已删除标签:“goo”、“foo” 所以预期结果应该是这样的:

  • 我有一个弹性查询脚本,用于使用我给出的参数计算地面距离,我必须在多个查询中使用它。是否有一种方法可以避免这种重复,例如,有一种计算全局变量并在所有脚本中使用它的方法。在本例中,我希望计算<code>距离 映射:

  • 我在elasticsearch中创建了一个观察器,当我们在索引中10分钟没有新条目或事件时,它会报告,这可以通过查看条目中的源字段来进一步划分。 我只得到了索引的最后10分钟,并查看了桶中不存在哪个源。 为此,我首先创建我们收到的所有源类型的列表,然后从返回的存储桶键创建一个列表。然后,我想比较列表以查看缺少哪个列表,然后将其传递到消息中。 我在for循环中遇到了一个通用错误。任何反馈对弹性和无痛

  • 问题内容: 说我创建一个对象,如下所示: 删除该属性以使其最终成为new 的最佳方法是什么? 问题答案: 像这样: 演示版