Если вы можете установить update-by-query plugin, есть способ сделать это. Этот плагин работает, предоставляя ему запрос, соответствующий обновляемым документам, и скрипт для обновления соответствующих документов.
curl -XPOST localhost:9200/your_index/your_type/_update_by_query -d '
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "_source[\"your_field\"].indexOf(\"+\") == 0"
}
}
}
},
"script": "ctx._source.your_field = ctx._source.your_field.substring(1);"
}'
Примечание: заменить your_index
, your_type
и your_field
с соответственно указательным, типом и именем поля.
Итак, мы говорим плагину, чтобы обновить все документы, содержащие значение your_field
, которое начинается с +
(не зная, если your_field
является анализируемой строкой или нет, здесь мы смотрим прямо в _source
, чтобы убедиться, что мы проверяем необработанное значение строки который был проиндексирован), а затем мы скажем скрипту обновить каждый соответствующий документ, взяв подстроку значения, оставляя знак +
.
Библиотека Python для ElasticSearch, скорее всего, также использует REST API. По теме: afaik вы не можете выполнять как запрос, так и обновление в ElasticSearch. Обновление означает, что переопределение и переиндексация выполняется индивидуально. Таким образом, вам следует либо получать партию элементов, которые необходимо обновить, а затем переиндексировать их, или если ваши данные поступают из внешнего источника, возможно, найдите там неправильные данные и переиндексируйте их. – Ashalynd