Ich kann keine Beschreibung sehen, wann ich eine Abfrage oder einen Filter oder eine Kombination aus beiden verwenden sollte. Was ist der Unterschied zwischen ihnen? Kann jemand bitte erklären?
elasticsearch
Jonesie
quelle
quelle
Antworten:
Der Unterschied ist einfach: Filter werden zwischengespeichert und beeinflussen die Punktzahl nicht, daher schneller als Abfragen. Schauen Sie auch hier vorbei . Angenommen, eine Abfrage wird normalerweise von den Benutzern eingegeben und ist ziemlich unvorhersehbar, während Filter den Benutzern helfen, die Suchergebnisse einzugrenzen, beispielsweise mithilfe von Facetten.
quelle
Dies ist, was offizielle Dokumentation sagt:
quelle
Ein Beispiel (probieren Sie es selbst)
Angenommen, der Index
myindex
enthält drei Dokumente:Abfrage
hello sam
(mit Schlüsselwortmust
)"Hello world! I am Sam."
Dem Dokument wird eine höhere Punktzahl zugewiesen als"Hello world!"
, da das erstere mit beiden Wörtern in der Abfrage übereinstimmt. Dokumente werden bewertet.Filter
hello sam
(mit Schlüsselwortfilter
)Dokumente, die entweder enthalten
hello
odersam
zurückgegeben werden. Dokumente werden NICHT bewertet .Sofern Sie keine Volltextsuche oder -bewertung benötigen, werden Filter bevorzugt, da häufig verwendete Filter von Elasticsearch automatisch zwischengespeichert werden, um die Leistung zu beschleunigen. Siehe Elasticsearch: Abfrage- und Filterkontext.
quelle
Wenige mehr dazu. Zuerst wird ein Filter angewendet, und dann wird die Abfrage über ihre Ergebnisse verarbeitet. Um die binäre True / False-Übereinstimmung pro Dokument zu speichern, wird ein sogenanntes BitSet-Array verwendet. Dieses BitSet-Array befindet sich im Speicher und wird ab dem zweiten Abfragen des Filters verwendet. Auf diese Weise können wir mithilfe der Bitstruktur-Array-Datenstruktur das zwischengespeicherte Ergebnis verwenden.
Ein weiterer Punkt, den Sie hier beachten sollten: Der Filter-Cache wird nur erstellt, wenn die Anforderung ausgeführt wird. Daher erhalten wir erst ab dem zweiten Treffer den Vorteil des Caching.
Aber dann können Sie eine wärmere API verwenden , um dies zu überwinden. Wenn Sie eine Abfrage mit Filter für eine wärmere API registrieren, wird sichergestellt, dass diese bei jedem Live-Start für ein neues Segment ausgeführt wird. Daher erhalten wir ab der ersten Ausführung selbst eine konstante Geschwindigkeit.
quelle
Grundsätzlich wird eine Abfrage verwendet, wenn Sie eine Suche in Ihren Dokumenten mit Bewertung durchführen möchten. Und Filter werden verwendet, um die mithilfe von Abfragen erzielten Ergebnisse einzugrenzen. Filter sind boolesch.
Angenommen, Sie haben einen Index von Restaurants wie Zomato. Jetzt möchten Sie nach Restaurants suchen, die "Pizza" anbieten. Dies ist im Grunde Ihr Suchbegriff.
Sie werden also die Abfrage verwenden, um alle Dokumente zu finden, die "Pizza" enthalten, und einige Ergebnisse werden erhalten.
Angenommen, Sie möchten eine Liste von Restaurants, die Pizza servieren und eine Bewertung von mindestens 4,0 haben.
Sie müssen also das Schlüsselwort "pizza" in Ihrer Abfrage verwenden und den Filter für die Bewertung als 4.0 anwenden.
Was passiert ist, dass Filter normalerweise auf die Ergebnisse angewendet werden, die durch Abfragen Ihres Index erhalten werden.
quelle
Filters
-> Stimmt dieses Dokument überein? eine binäre Ja- oder Nein- AntwortQueries
-> Stimmt dieses Dokument überein? Wie gut passt es zusammen? verwendet Scoringquelle
Seit Version 2 von Elasticsearch wurden Filter und Abfragen zusammengeführt, und jede Abfrageklausel kann je nach Kontext entweder als Filter oder als Abfrage verwendet werden. Wie bei Version 1 werden Filter zwischengespeichert und sollten verwendet werden, wenn die Bewertung keine Rolle spielt.
Quelle: https://logz.io/blog/elasticsearch-queries/
quelle