Как я могу обновить данные, используя update_by_query в Elasticsearch 2.x?

Мне нужно несколько обновлений документов в эластичном по некоторому запросу. Я нашел одно решение. Как это:

{
    "query": {
        "term": {
            "name": "some name"
        }
    },
    "script": {
        "inline": "ctx._source.some_field = \"value\""
    }
}

Но это не совсем то, что мне нужно. Потому что один запрос обновит 10 или 20 полей, например. Поэтому неудобно генерировать строку "script" для многих полей. В идеале мне нужно что-то вроде этого:

{
    "query": {
        "term": {
            "name": "some name"
        }
    },
    "doc": {
        "field1": "value1",
        "field2": "value2",
        "field3": "value3",
        "field4": "value4",
        "field5": "value5",
        ...
        "fieldN": "valueN",
    }
}

Для того, чтобы реализовать что-то подобное выше, я был бы признателен за альтернативу

1 ответ

Решение

Вы можете использовать скрипт как этот:

  "script": {
    "inline": "fieldsAndValues.each{ k, v -> ctx._source[k] = \"${v}\" }",
    "lang": "groovy",
    "params": {
      "fieldsAndValues": {
        "field1": "value1",
        "field2": "value2",
        "field3": "value3"
      }
    }
  }
Другие вопросы по тегам