Elasticsearch array muss und must_not
Ich habe eine Dokumenten suchen, wie dies in meinem elasticsearch-DB :
{
"tags" => [
"tag-1",
"tag-2",
"tag-3",
"tag-A"
]
"created_at" =>"2013-07-02 12:42:19 UTC",
"label" =>"Mon super label"
}
Ich würde gerne in der Lage sein zu filtern die meine Dokumente mit diesen Kriterien :
Dokumenten-tags-array muss tags-1, tags-3 und tags-2, aber nicht muss-tags-A.
Wollte ich mit einem bool-filter, aber ich kann nicht verwalten, damit es funktioniert !
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Methode, die scheint zu Sie erreichen wollen: http://sense.qbox.io/gist/4dd806936f12a9668d61ce63f39cb2c284512443
Ersten, die ich erstellt einen index, bei dem eine explizite Zuordnung. Ich Tat dies, so könnte ich die
"tags"
Eigenschaft"index": "not_analyzed"
. Dies bedeutet, dass der text nicht in irgendeiner Weise verändert werden, vereinfacht das die Abfrage für dieses Beispiel.und fügen Sie dann einige docs:
Dann können wir die Abfrage mit
must
undmust_not
Klauseln in einembool
filter wie folgt:ergibt das richtige Ergebnis:
Beachten Sie die
"execution" : "and"
parameter in derterms
filter in dermust
- Klausel. Dies bedeutet, dass nur docs, die haben alle die"tags"
angegeben werden zurückgegeben (anstatt diejenigen, die mit ein oder mehr). Das war vielleicht das, was Sie fehlten. Lesen Sie mehr über die Optionen in der ES docs.Machte ich einen lauffähigen Beispiel hier, dass Sie mit spielen können, wenn Sie ES installiert und läuft bei
localhost:9200
, oder Sie können Ihre eigenen Endpunkt.