Ich habe ein Dokument, das in meiner elastischen DB so aussieht:
%Vor%Ich möchte meine Dokumente nach diesen Kriterien filtern können: Documents Tags Array muss Tags-1, Tags-3 und Tags-2 haben, darf aber keine Tags-A haben.
Ich habe versucht, einen Bool-Filter zu verwenden, aber ich kann es nicht funktionieren lassen!
Hier ist eine Methode, die Sie zu erfüllen scheint: Ссылка
Zuerst habe ich einen Index mit einer expliziten Zuordnung erstellt. Ich tat dies, damit ich die Eigenschaft "tags"
auf "index": "not_analyzed"
setzen konnte. Dies bedeutet, dass der Text in keiner Weise verändert wird, was den Abfrageprozess für dieses Beispiel vereinfacht.
und fügen Sie dann einige Dokumente hinzu:
%Vor% Dann können wir mit must
und must_not
-Klauseln in einem bool
-Filter wie folgt abfragen:
liefert das korrekte Ergebnis:
%Vor% Beachten Sie den "execution" : "and"
-Parameter im terms
-Filter in der must
-Klausel. Dies bedeutet, dass nur Dokumente zurückgegeben werden, die alle angegebenen "tags"
enthalten (und nicht diejenigen, die mit einem oder mehreren übereinstimmen). Das war vielleicht das, was du vermisst hast. Sie können mehr über die Optionen in den ES-Dokumenten .
Ich habe ein lauffähiges Beispiel hier erstellt, mit dem Sie spielen können, wenn Sie ES installiert haben und unter localhost:9200
laufen. oder Sie können Ihren eigenen Endpunkt angeben.
Tags und Links elasticsearch filtering