Was ist der effizienteste Test, wenn ein Dokument mit einer _id existiert?
Ich könnte natürlich tun:
%Vor%Oder ich könnte mit gehen: Wie überprüfe ich nach doppelten Daten auf ElasticSearch? und schicke ein leeres Dokument, denke ich.
Etwas effizienter?
Sie können das HTTP-HEAD-Verb nur zum Abrufen der Header verwenden.
%Vor%Sie erhalten entweder 200 oder 404 ohne einen Teil des Dokumententextes.
Wenn in einer Version vor 2.1
die "Search Exists API" verwendet werden kann.
Ein Beispiel:
Durchsuchen Sie den Twitter-Index nach einem Tweet-Typ durch den Benutzer "kimchy"
%Vor%Der Antworttext enthält ein true oder false, wenn Tweets von diesem Benutzer vorhanden sind:
%Vor%Sie können die Abfrage auch so im Anfragetext senden (POST oder GET funktionieren beide):
%Vor%Die Antwort wird die gleiche sein.
Ich würde einfach die get-API verwenden, die eine 404 zurückgibt, wenn das Objekt nicht existiert sonst das Objekt selbst. Wenn Sie die Java-API verwenden, finden Sie eine Methode isExists
im Objekt GetResponse
.
Wenn das Feld _id
, auf das Sie sich beziehen, nicht in Ihren Dokumenten enthalten ist, würde fields=_id
weder das _source
noch ein bestimmtes Feld unter fields
zurückgeben. Aber Sie würden das _id
im Header der Antwort trotzdem zurückbekommen.
Wenn Sie die REST-API verwenden, können Sie Folgendes verwenden:
curl -XHEAD 'http://localhost:9200/twitter/tweet/1
es wird das Dokument nicht zurückgeben, aber nur 404, wenn nicht gefunden, sonst 200. Der Hauptteil der Antwort enthält auch das exists-Flag mit der gleichen Bedeutung.
Interessant ist, dass die Verwendung der HEAD-Methode einer get-Anforderung intern zugeordnet wird, weshalb sie nicht direkt der Java-API ausgesetzt ist. Sie können jedoch das gleiche Verhalten erhalten, indem Sie mit folgendem Code GetRequest
erstellen:
Tags und Links elasticsearch