Odpowiedzi:
term
zapytanie pasuje do pojedynczego terminu bez zmian: wartość nie jest analizowana . Więc nie musi być pisane małymi literami w zależności od tego, co zindeksowałeś.
Jeśli podałeś Bennett
w czasie indeksowania, a wartość nie jest analizowana, poniższe zapytanie nic nie zwróci:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
zapytanie przeanalizuje dane wejściowe, jeśli dla badanego pola zdefiniowano analizatory i znajdzie dokumenty spełniające następujące kryteria:
Na przykład, jeśli indeksujesz następujące dokumenty (używając standard
analizatora dla pola foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
To match_phrase
zapytanie zwróci tylko pierwszy i drugi dokument:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
wyszukiwanie zapytań domyślnie w polu _all, które zawiera tekst z kilku pól tekstowych jednocześnie. Co więcej, jest analizowany i obsługuje niektóre operatory (AND / OR ...), symbole wieloznaczne i tak dalej (zobacz powiązaną składnię ).
W miarę match_phrase
zapytań wejście jest analizowane zgodnie z analizatorem ustawionym na odpytywanym polu.
Inaczej niż w przypadku match_phrase
, terminy uzyskane po analizie nie muszą być w tej samej kolejności, chyba że użytkownik użył cudzysłowów wokół danych wejściowych.
Na przykład, używając tych samych dokumentów co poprzednio, zapytanie zwróci wszystkie dokumenty:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Ale to zapytanie zwróci te same 2 dokumenty co match_phrase
zapytanie:
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
Jest znacznie więcej do powiedzenia na temat różnych opcji tych zapytań, zapoznaj się z powiązaną dokumentacją:
Mam nadzieję, że to jest wystarczająco jasne i pomoże.
match
zapytanie używa analizatora, jeśli pole jest analizowane, więc tak. Domyślnie zwróci dokumenty zawierające co najmniej jeden z warunków (patrz parametr operator
), a kolejność nie jest ważna.
Myślę, że ktoś zdecydowanie szuka różnic między nimi w odniesieniu do CZĘŚCIOWEGO WYSZUKIWANIA Oto moja analiza z domyślnym „standardowym analizatorem” : -
Załóżmy, że mamy dane: -
{"name": "Hello"}
A co jeśli chcemy przeprowadzić częściowe wyszukiwanie za pomocą ell ???
Zapytanie o termin LUB zapytanie o dopasowanie
{"term":{"name": "*ell*" }
Nie zadziała, zwracam uwagę.
{"term":{"name": "*zz* *ell*" }
Nie zadziała, zwracam uwagę.
Wniosek - termin lub dopasowanie nie może w ogóle przeprowadzić częściowego wyszukiwania
Zapytanie z symbolem wieloznacznym: -
{"wildcard":{"name": "*ell*" }
Będzie działać i da wynik {"name": "Hello"}
{"wildcard":{"name": "*zz* *ell*" }
Nie zadziała, zwracam uwagę.
Wniosek - symbol wieloznaczny jest w stanie przeprowadzić częściowe wyszukiwanie za pomocą tylko jednego tokena
Query_string: -
{"query_string": {"default_field": "name","query": "*ell*"}
Będzie działać i da wynik {"name": "Hello"}
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
Będzie działać i da wynik {"name": "Hello"}.
Wniosek - query_string może wyszukiwać za pomocą dwóch tokenów
-> tutaj tokenami są ell i zz
wildcard is able to do partial search with one token only
: dokładniej, wildcard
zapytania domyślnie działają tylko na keyword
polach , które z definicji są jednoznakowe. Nie ma to nic wspólnego z tym, że zawartość pola jest więcej niż jednym słowem. W zapytaniu z symbolem wieloznacznym będzie pasować „ozzy hello”.