2015-05-31 3 views
0

Я начал использовать Elsaticsearch и Sense несколько недель назад. Теперь мне нужно многократно обновлять строку String во всех документах определенного индекса следующим образом: Если строка начинается с «+», обновите поле до того же значения без «+».Простая область обновления в elasticsearch

старый: номер: «+212112233» новый: номер: «212112233»

Есть простой способ для меня, чтобы сделать это с REST DSL или мне нужно использовать Python?

Спасибо!

+0

Библиотека Python для ElasticSearch, скорее всего, также использует REST API. По теме: afaik вы не можете выполнять как запрос, так и обновление в ElasticSearch. Обновление означает, что переопределение и переиндексация выполняется индивидуально. Таким образом, вам следует либо получать партию элементов, которые необходимо обновить, а затем переиндексировать их, или если ваши данные поступают из внешнего источника, возможно, найдите там неправильные данные и переиндексируйте их. – Ashalynd

ответ

0

Если вы можете установить 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, чтобы убедиться, что мы проверяем необработанное значение строки который был проиндексирован), а затем мы скажем скрипту обновить каждый соответствующий документ, взяв подстроку значения, оставляя знак +.

Смежные вопросы