2013-10-24 3 views
10

Возможно ли обновить некоторые значения определенных полей в elasticsearch без перезаписи других полей. ?Обновить только значение поля в elasticsearch

+0

Могу ли я узнать, был ли мой ответ полезным? – javanna

+0

да спасибо за помощь. Я использовал формат скрипта и следил за [update api] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html) –

+0

Отлично, вы могли бы хочу принять ответ, затем ... – javanna

ответ

-1

вы можете сделать следующее:

  • получить документ
  • обновления ваше поле
  • написать документ обратно

это то же самое для Solr

если вы просто напишите новый документ (с существующим идентификатором) и заполните только одно поле, которое вы хотите обновить, кто le document (все остальные поля) будет перезаписан

+0

Проверьте elasticsearch [update api] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html), который не требуется отправить весь документ самостоятельно, но разрешить отправку частичного документа или сценария. – javanna

12

Да, Elasticsearch поддерживает частичные обновления. Это означает, что вы можете представить:

  • частичный документ, который будет объединен с существующим
  • скрипт, который будет выполняться поверх существующего документа

Посмотрите update api. В обоих случаях, что происходит под капотом, из-за того, как работает базовая библиотека lucene, заключается в том, что извлекаемый документ извлекается, изменения применяются к нему, а старый документ перезаписывается новым. В конце концов, на самом деле это полная переработка документа, но вам не нужно отправлять весь документ, если вы не отключили _source field, включенный по умолчанию, который является полем, которое позволяет вам получить весь документ, чтобы применить к нему изменения.

+0

В качестве продолжения вы можете взглянуть на этот вопрос http://stackoverflow.com/questions/28937946/elasticsearch-particial-update-of-not-indexed-field –

4

Как codebased вклад в этот ответ, можно использовать следующий запрос:

POST /index/type/100100471/_update 
{ 
    "doc" : { 
     "yourProperty" : 10000 
    } 
} 

Этот запрос обновляет yourPropertyсвойства только.

В результате, появляется этот ответ:

{ 
    "_index": "index", 
    "_type": "type", 
    "_id": "100100471", 
    "_version": 1, 
    "_shards": { 
     "total": 0, 
     "successful": 1, 
     "failed": 0 
    } 
} 
Смежные вопросы