Elasticsearch Array muss und muss nicht

8

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!

    
user2854544 16.01.2014, 17:12
quelle

1 Antwort

13

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.

%Vor%

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:

%Vor%

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.

    
Sloan Ahrens 16.01.2014, 18:04
quelle

Tags und Links