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:
- wszystkie terminy muszą pojawić się w polu
- muszą mieć tę samą kolejność, co wartość wejściowa
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 parametroperator
), 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” : -
{"name": "Hello"}
A co jeśli chcemy przeprowadzić częściowe wyszukiwanie za pomocą ell ???
Nie zadziała, zwracam uwagę.
Nie zadziała, zwracam uwagę.
Wniosek - termin lub dopasowanie nie może w ogóle przeprowadzić częściowego wyszukiwania
Będzie działać i da wynik {"name": "Hello"}
Nie zadziała, zwracam uwagę.
Wniosek - symbol wieloznaczny jest w stanie przeprowadzić częściowe wyszukiwanie za pomocą tylko jednego tokena
Będzie działać i da wynik {"name": "Hello"}
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
źródło
wildcard is able to do partial search with one token only
: dokładniej,wildcard
zapytania domyślnie działają tylko nakeyword
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”.