弹性更新查询更新整个索引代替

h7appiyu  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(394)

我试图让一个查询工作,它将更新文档中的一个特定字段,只要它匹配一个查询(在本例中,一个字段匹配一个精确的值)。
在这里,我试图查询所有字段“foo”设置为“bar”的文档,并将每个文档中的字段“textfield5”设置为1337。索引中只有一个handfull与此匹配。但是,当我运行这个查询时,索引中的每个文档都会更新其textfield5。

POST /threat_vuln/_update_by_query
{
  "query": { 
    "match": {
      "Foo": "Bar"
    }
  },

  "script" : {
    "source" : "ctx._source.TextField5='1337';",
    "lang" : "painless"
  }
}

我已经检查了updateapi和updatebyqueryapi,仍然缺少一些东西。如何将其更改为仅更新与查询匹配的文档?
我在Kibana7.4.0上
编辑:也尝试了这个方法,它仍然更新索引中的每个文档,而不是那些与查询匹配的文档:

POST /threat_vuln/_update_by_query
{
  "query": { 
    "bool" : {
      "must": [
                  {
                      "match": {
                            "Foo": "Bar"
                          }
                    }
              ]
      }
  },

  "script" : {
    "source" : "ctx._source.TextField5='1337';",
    "lang" : "painless"
  }
}
cnwbcb6i

cnwbcb6i1#

我让它按计划工作:

POST /threat_vuln/_update_by_query
{
  "query": { 
    "bool" : {
      "must": [
                  {
                      "match": {
                            "Foo.keyword": "Bar"
                          }
                    }
              ]
      }
  },

  "script" : {
    "source" : "ctx._source.TextField5='1337';",
    "lang" : "painless"
  }
}

我仍然不明白这个问题中的例子是如何/为什么会继续用现在看来应该什么都不返回的查询来更新所有内容的,但是我离题了。

相关问题