Ich verwende Elasticsearch, um meine Dokumente zu indizieren.
Ist es möglich, es anzuweisen, nur bestimmte Felder anstelle des gesamten gespeicherten JSON-Dokuments zurückzugeben?
elasticsearch
user1199438
quelle
quelle
Antworten:
Ja! Verwenden Sie einen Quellfilter . Wenn Sie mit JSON suchen, sieht es ungefähr so aus:
In ES 2.4 und früheren Versionen können Sie auch die Feldoption für die Such-API verwenden :
Dies ist in ES 5+ veraltet. Und Quellfilter sind sowieso leistungsfähiger!
quelle
Ich fand die Dokumente
get api
hilfreich, insbesondere die beiden Abschnitte Quellfilterung und Felder : https://www.elastic.co/guide/en/elasticsearch/reference/7.3/docs-get.html#get-source- FilternSie geben über die Quellfilterung an:
Welches passte perfekt zu meinem Anwendungsfall. Am Ende habe ich die Quelle einfach so gefiltert (mit der Kurzschrift):
Zu Ihrer Information, geben sie in der Dokumentation über die Felder Parameter:
Es scheint für speziell gespeicherte Felder zu sorgen, in denen jedes Feld in einem Array platziert wird. Wenn die angegebenen Felder nicht gespeichert wurden, werden alle Felder aus der _source abgerufen, was zu langsameren Abrufen führen kann. Ich hatte auch Probleme damit, Felder vom Typ Objekt zurückzugeben.
Zusammenfassend haben Sie also zwei Möglichkeiten, entweder durch Quellfilterung oder durch [gespeicherte] Felder.
quelle
quelle
In Elasticsearch 5.x ist der oben genannte Ansatz veraltet. Sie können den _source-Ansatz verwenden, aber in bestimmten Situationen kann es sinnvoll sein, ein Feld zu speichern. Wenn Sie beispielsweise ein Dokument mit einem Titel, einem Datum und einem sehr großen Inhaltsfeld haben, möchten Sie möglicherweise nur den Titel und das Datum abrufen, ohne diese Felder aus einem großen _source-Feld extrahieren zu müssen:
In diesem Fall würden Sie verwenden:
Weitere Informationen zum Indizieren gespeicherter Felder finden Sie in der Dokumentation. Immer froh für ein Upvote!
quelle
quelle
response_filtering
https://stackoverflow.com/a/35647027/844700
quelle
Quelle Filterung
Ermöglicht zu kontrollieren , wie das _Source Feld bei jedem Treffer zurückgegeben.
Das Schlüsselwort "enthält" definiert die spezifischen Felder.
quelle
Eine REST-API-GET-Anforderung kann mit dem Parameter '_source' erfolgen.
Beispielanforderung
Antwort
}}
quelle
Yes Quellenfilter verwenden Sie dies erreicht werden kann, ist hier die doc source-Filterung
Beispielanforderung
Ausgabe wird sein
quelle
In Java können Sie setFetchSource folgendermaßen verwenden:
quelle
Sie haben beispielsweise ein Dokument mit drei Feldern:
Wenn Sie zurückkehren möchten
name
undscore
den folgenden Befehl verwenden können:Wenn Sie einige Felder erhalten möchten, die einem Muster entsprechen:
Schließen Sie möglicherweise einige Felder aus:
quelle
Mit der Java-API verwende ich Folgendes, um alle Datensätze aus einer Reihe bestimmter Felder abzurufen:
quelle