Nie widzę żadnego opisu tego, kiedy powinienem użyć zapytania, filtru lub ich kombinacji. Jaka jest różnica między nimi? Czy ktoś może wyjaśnić?
elasticsearch
Jonesie
źródło
źródło
Odpowiedzi:
Różnica jest prosta: filtry są buforowane i nie wpływają na wynik, dlatego są szybsze niż zapytania. Spójrz też tutaj . Powiedzmy, że zapytanie jest zwykle czymś, co użytkownicy wpisują i jest prawie nieprzewidywalne, a filtry pomagają użytkownikom zawęzić wyniki wyszukiwania, na przykład przy użyciu aspektów.
źródło
Tak mówi oficjalna dokumentacja:
źródło
Przykład (spróbuj sam)
Indeks Say
myindex
zawiera trzy dokumenty:Zapytanie
hello sam
(przy użyciu słowa kluczowegomust
)Dokument
"Hello world! I am Sam."
ma wyższy wynik niż"Hello world!"
, ponieważ ten pierwszy pasuje do obu słów w zapytaniu. Dokumenty są punktowane.Filtruj
hello sam
(używając słowa kluczowegofilter
)Dokumenty, które zawierają albo
hello
czysam
są zwracane. Dokumenty NIE są punktowane .Jeśli nie potrzebujesz wyszukiwania pełnotekstowego lub oceniania, preferowane są filtry, ponieważ często używane filtry będą buforowane automatycznie przez Elasticsearch, aby przyspieszyć działanie. Zobacz Elasticsearch: Zapytanie i kontekst filtrowania.
źródło
Jeszcze kilka dodatków do tego samego. Najpierw stosowany jest filtr, a następnie zapytanie jest przetwarzane na podstawie wyników. Aby zapisać binarne dopasowanie prawda / fałsz dla każdego dokumentu, używana jest funkcja zwana bitSet Array. Ta tablica BitSet jest w pamięci i będzie używana od drugiego zapytania o filtr. W ten sposób, korzystając ze struktury danych tablicy zestawów bitów, jesteśmy w stanie wykorzystać buforowany wynik.
Należy jeszcze wspomnieć o tym, że pamięć podręczna filtra jest tworzona tylko wtedy, gdy żądanie jest wykonywane, a więc dopiero od drugiego trafienia, faktycznie uzyskujemy przewagę buforowania.
Ale wtedy możesz użyć cieplejszego API , aby to przerastać. Po zarejestrowaniu zapytania z filtrem w cieplejszym interfejsie API upewni się, że jest ono wykonywane dla nowego segmentu za każdym razem, gdy zostanie uruchomione. Dzięki temu uzyskamy stałą prędkość od samego pierwszego wykonania.
źródło
Zasadniczo zapytanie jest używane, gdy chcesz przeprowadzić wyszukiwanie w swoich dokumentach z punktacją. Do zawężenia zestawu wyników uzyskanych za pomocą zapytania służą filtry. Filtry są typu logicznego.
Załóżmy na przykład, że masz indeks restauracji, takich jak zomato. Teraz chcesz wyszukać restauracje serwujące „pizzę” , która jest w zasadzie słowem kluczowym wyszukiwania.
Użyjesz zapytania, aby znaleźć wszystkie dokumenty zawierające „pizzę” i uzyskać niektóre wyniki.
Powiedz teraz, że chcesz mieć listę restauracji, która serwuje pizzę i ma ocenę co najmniej 4.0.
Musisz więc użyć słowa kluczowego „pizza” w zapytaniu i zastosować filtr do oceny jako 4.0.
To, co się dzieje, polega na tym, że filtry są zwykle stosowane do wyników uzyskanych przez zapytanie twojego indeksu.
źródło
Filters
-> Czy ten dokument pasuje? binarny tak lub nie odpowiedźQueries
-> Czy ten dokument pasuje? Jak dobrze to pasuje? używa punktacjiźródło
Od wersji 2 Elasticsearch filtry i zapytania zostały scalone, a dowolna klauzula zapytania może być używana jako filtr lub zapytanie (w zależności od kontekstu). Podobnie jak w wersji 1, filtry są buforowane i powinny być używane, jeśli ocenianie nie ma znaczenia.
Źródło: https://logz.io/blog/elasticsearch-queries/
źródło