Was ist der Unterschied zwischen MUST
und SHOULD
bool query in ES?
Wenn ich NUR Ergebnisse möchte, die meine Begriffe enthalten, sollte ich sie dann verwenden must
?
Ich habe eine Abfrage, die nur bestimmte Werte enthalten sollte, und auch keine Ergebnisse, deren Datum / Zeitstempel niedriger ist als die heutige Zeit / Datum - JETZT
Ebenfalls
Kann ich mehrere Filter in einem Muss wie dem folgenden Code verwenden:
"filtered": {
"filter": {
"bool" : {
"must" : {
"term" : { "type" : 1 }
"term" : { "totals" : 14 }
"term" : { "groupId" : 3 }
"range" : {
"expires" : {
"gte": "now"
}
}
},
quelle
must
Kategorien oder Preisen undshould
Attributen wie Größe und Farbe? Wenn nun Größe L und XL ausgewählt sind, ist es ein Muss zwischen diesen beiden, aber wenn auch Farbe Grün ausgewählt ist, muss es ein Muss für (Größen L ODER XL) UND (Farbe Grün) sein. Ist das möglich?minimum_number_should_match = 1
, um die Idee durchzusetzen, dass "mindestens eine dieser Klauseln übereinstimmen muss".Da dies eine beliebte Frage ist, möchte ich hinzufügen, dass sich in Elasticsearch Version 2 die Dinge etwas geändert haben.
Anstelle einer
filtered
Abfrage sollte einebool
Abfrage in der obersten Ebene verwendet werden.Wenn Sie sich nicht für die Partitur interessieren
must
, geben Sie diese Teile in denfilter
Schlüssel ein. Keine Wertung bedeutet schnellere Suche. Außerdem findet Elasticsearch automatisch heraus, ob sie zwischengespeichert werden sollen usw.must_not
Dies gilt auch für das Caching.Referenz: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
Beachten Sie auch, dass
"gte": "now"
dies aufgrund der Millisekunden-Granularität nicht zwischengespeichert werden kann. Verwenden Sie zwei Bereiche in einermust
Klausel: einen mitnow/1h
und einen mit,now
damit der erste für eine Weile zwischengespeichert werden kann und der zweite für eine präzise Filterung, die auf eine kleinere Ergebnismenge beschleunigt wird.quelle
Wie in der Dokumentation gesagt :
Mit anderen Worten, die Ergebnisse müssen mit allen in der must- Klausel enthaltenen Abfragen übereinstimmen (oder mit mindestens einer der should- Klauseln übereinstimmen , wenn es keine must- Klausel gibt.
Da Sie möchten, dass Ihre Ergebnisse alle Abfragen erfüllen, sollten Sie must verwenden .
Sie können tatsächlich Filter in einer booleschen Abfrage verwenden.
quelle