Эластичное обновление по запросу обновляет весь индекс вместо этого

Я пытаюсь заставить работать запрос, который будет обновлять определенное поле в документе, если оно соответствует запросу (в этом примере, когда одно поле соответствует точному значению).

Здесь я пытаюсь запросить все документы, в которых для поля Foo установлено значение Bar, и установить для поля TextField5 в каждом из них значение 1337. В индексе есть только несколько, которые соответствуют этому. Однако, когда я запускаю этот запрос, каждый документ в индексе обновляет свое TextField5.

POST /threat_vuln/_update_by_query
{
  "query": { 
    "match": {
      "Foo": "Bar"
    }
  },
  
  "script" : {
    "source" : "ctx._source.TextField5='1337';",
    "lang" : "painless"
  }
}

Я ознакомился с API обновлений. и Update By Query API и мне чего-то не хватает. Как я могу изменить это, чтобы обновлять только те документы, которые соответствуют запросу?

Я на Кибане 7.4.0

РЕДАКТИРОВАТЬ: Также пробовал это, которое по-прежнему обновляет каждый документ в индексе вместо тех, которые соответствуют запросу:

POST /threat_vuln/_update_by_query
{
  "query": { 
    "bool" : {
      "must": [
                  {
                      "match": {
                            "Foo": "Bar"
                          }
                    }
              ]
      }
  },
  
  "script" : {
    "source" : "ctx._source.TextField5='1337';",
    "lang" : "painless"
  }
}

person DevBot    schedule 06.12.2020    source источник


Ответы (1)


Я заставил это работать по назначению:

POST /threat_vuln/_update_by_query
{
  "query": { 
    "bool" : {
      "must": [
                  {
                      "match": {
                            "Foo.keyword": "Bar"
                          }
                    }
              ]
      }
  },
  
  "script" : {
    "source" : "ctx._source.TextField5='1337';",
    "lang" : "painless"
  }
}

Я до сих пор не понимаю, как/почему примеры в вопросе просто идут вперед и обновляют все тем, что теперь кажется запросом, который ничего не должен возвращать, но я отвлекся.

person DevBot    schedule 06.12.2020
comment
Пробовали ли вы сначала выполнять разные запросы на конечной точке _search? Что они вернули? - person Val; 07.12.2020