2013-10-24 9 views
10

Ist es möglich, einige spezifische Felder in elasticsearch zu aktualisieren, ohne andere Felder zu überschreiben? ?Nur spezifischen Feldwert in elasticsearch aktualisieren

+0

Darf ich wissen, ob meine Antwort hilfreich war? – javanna

+0

ja danke für die Hilfe. Ich habe Skript-Format verwendet und folgte [Update API] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html) –

+0

Großartig, Sie könnten will die antwort dann annehmen ... – javanna

Antwort

-1

Sie können wie folgt vorgehen:

  • erhalten das Dokument
  • Update Ihr Feld
  • schreiben das Dokument zurück

es das gleiche für Solr ist

wenn Sie nur schreibe ein neues Dokument (mit einer bestehenden ID) und fülle nur das eine Feld, das du aktualisieren willst, das wer Das Dokument (alle anderen Felder) wird überschrieben.

+0

Schau dir das elasticsearch [update api] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html) an, was nicht so ist Sie müssen das gesamte Dokument selbst einreichen, können jedoch ein Teildokument oder ein Skript einreichen. – javanna

12

Ja, Elasticsearch unterstützt Teilupdates. Das bedeutet, dass Sie einreichen können:

  • ein Teildokument, das mit den bestehenden
  • einen Skript zusammengeführt werden, die auf der Oberseite des vorhandenen Dokuments

Werfen Sie einen Blick ausgeführt werden bei die update api. In beiden Fällen passiert es aufgrund der Funktionsweise der zugrunde liegenden Lucene-Bibliothek, dass das zu aktualisierende Dokument abgerufen wird, die Änderungen werden darauf angewendet und das alte Dokument wird mit dem neuen überschrieben. Am Ende des Tages ist es tatsächlich eine vollständige Neuschreiben des Dokuments, aber Sie müssen nicht das gesamte Dokument senden, es sei denn, Sie deaktiviert _source field, standardmäßig aktiviert, das ist das Feld, mit dem Sie auf ganze abrufen können dokumentieren, um Änderungen daran vorzunehmen.

+0

Als Fortsetzung könnten Sie diese Frage http://stackoverflow.com/questions/28937946/elasticsearch-particu-update-of-not-indexed-field betrachten –

4

Als codebased Beitrag zu dieser Antwort kann die folgende Abfrage verwendet werden:

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

Diese Abfrage aktualisiert yourPropertyEigenschaft nur.

Als Ergebnis dieser Reaktion wird angezeigt:

{ 
    "_index": "index", 
    "_type": "type", 
    "_id": "100100471", 
    "_version": 1, 
    "_shards": { 
     "total": 0, 
     "successful": 1, 
     "failed": 0 
    } 
} 
Verwandte Themen