2013-10-24 10 views
10

Czy jest możliwe zaktualizowanie niektórych konkretnych pól wartości w elastycznym wyszukującym bez nadpisywania innych pól. ?Zaktualizuj tylko określoną wartość pola w elastycznym wyszukującym

+0

mogę wiedzieć, czy moja odpowiedź była pomocna? – javanna

+0

Tak, dziękuję za pomoc. Korzystam z formatu skryptu i postępuję zgodnie z [update api] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html) –

+0

Świetnie, możesz więc chcesz zaakceptować odpowiedź ... – javanna

Odpowiedz

-1

można wykonać następujące czynności:

  • dostać
  • zaktualizować swoje pole dokumentowi
  • napisać dokument z powrotem

to samo dla Solr

jeśli tylko napisz nowy dokument (z istniejącym ID) i wypełnij tylko jedno pole, które chcesz zaktualizować, kto le document (wszystkie pozostałe pola) zostanie nadpisany

+0

Zapoznaj się z elasticsearch [update api] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html), który nie wymagać przedłożenia całego dokumentu samodzielnie, ale pozwala przesłać częściowy dokument lub skrypt. – javanna

12

Tak, Elasticsearch obsługuje częściowe aktualizacje. Oznacza to, że można złożyć:

  • częściowy dokument, który zostanie połączony z istniejącym jednym
  • skrypt, który zostanie wykonany w górnej części istniejącego dokumentu

Zapraszamy do obejrzenia update api. W obu przypadkach, co dzieje się pod maską, z powodu działania biblioteki leucene, jest to, że dokument do aktualizacji jest pobierany, zmiany są do niego stosowane, a stary dokument zostanie zastąpiony nowym. Pod koniec dnia jest to w rzeczywistości kompletna przeróbka dokumentu, ale nie musisz przesyłać całego dokumentu, chyba że wyłączyłeś domyślnie włączone _source field, które jest polem pozwalającym odzyskać całość dokument w celu zastosowania zmian w nim.

+0

Jako kontynuację możesz rzucić okiem na to pytanie http://stackoverflow.com/questions/28937946/elasticsearch-particial-update-of-not-indexed-field –

4

Jako codebased wkład do tej odpowiedzi, poniższa kwerenda może być stosowany:

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

Ta kwerenda aktualizuje yourPropertywłaściwość tylko.

W wyniku tego pojawia się odpowiedź:

{ 
    "_index": "index", 
    "_type": "type", 
    "_id": "100100471", 
    "_version": 1, 
    "_shards": { 
     "total": 0, 
     "successful": 1, 
     "failed": 0 
    } 
} 
Powiązane problemy