Yanıtlar:
term
sorgu olduğu gibi tek bir terimle eşleşir: değer analiz edilmez . Dolayısıyla, indekslediğiniz şeye bağlı olarak küçük harfle yazılması gerekmez.
Bennett
Dizin zamanında sağladıysanız ve değer analiz edilmezse aşağıdaki sorgu hiçbir şey döndürmez:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
sorgu, sorgulanan alan için çözümleyiciler tanımlanırsa girdiyi analiz eder ve aşağıdaki kriterlere uyan belgeleri bulur:
Örneğin, aşağıdaki belgeleri dizine eklerseniz ( standard
alan için analizörü kullanarak foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
Bu match_phrase
sorgu yalnızca birinci ve ikinci belgeleri döndürür:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
aynı anda birkaç metin alanının metnini içeren bir _all alanında varsayılan olarak sorgu araması . Üstelik ayrıştırılır ve bazı operatörleri (VE / VEYA ...), joker karakterleri ve benzerlerini destekler ( ilgili sözdizimine bakın ).
Olarak match_phrase
sorgular, giriş sorgulanan alanın üzerinde analiz seti göre analiz edilir.
match_phrase
Kullanıcı girdinin etrafında tırnak işaretleri kullanmadıkça, analizden sonra elde edilen terimlerin tersine aynı sırada olması gerekmez.
Örneğin, öncekiyle aynı belgeleri kullanarak, bu sorgu tüm belgeleri döndürür:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Ancak bu sorgu, sorgu ile aynı 2 belgeyi döndürecektir match_phrase
:
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
Bu sorgular için farklı seçenekler hakkında söylenecek çok şey var, lütfen ilgili belgelere bir göz atın:
Umarım bu yeterince açıktır ve yardımcı olacaktır.
match
sorgu alan analiz edilirse analizörü kullanır, yani evet. Varsayılan olarak, terimlerden en az birine (parametreye bakın operator
) sahip belgeleri döndürür ve sıra önemli değildir.
Sanırım birileri KISMİ ARAMA açısından kesinlikle aralarındaki farkları arıyor İşte benim varsayılan 'standart analizör' ile analizim : -
Diyelim ki, elimizde veriler var: -
{"name": "Merhaba"}
Şimdi ell ile kısmi arama yapmak istersek ???
Terim Sorgusu VEYA Eşleşme sorgusu
{"term":{"name": "*ell*" }
Çalışmayacak, not ederek dönün.
{"term":{"name": "*zz* *ell*" }
Çalışmayacak, not ederek dönün.
Sonuç - Terim veya Maç hiçbir şekilde kısmi arama yapamaz
joker karakter Sorgusu: -
{"wildcard":{"name": "*ell*" }
Çalışacak sonucu {"name": "Merhaba"} verecek
{"wildcard":{"name": "*zz* *ell*" }
Çalışmayacak, not ederek dönün.
Sonuç - joker karakter yalnızca bir jetonla kısmi arama yapabilir
Sorgu_dizesi: -
{"query_string": {"default_field": "name","query": "*ell*"}
Çalışacak sonuç {"name": "Merhaba"} verir
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
Çalışacak sonucu {"name": "Merhaba"} verir.
Sonuç - query_string iki jetonla arama yapabiliyor
-> buradaki simge ell ve zz'dir
wildcard is able to do partial search with one token only
: daha doğrusu, wildcard
sorgular varsayılan olarak yalnızcakeyword
tanım gereği tek belirteç olan alanlarda çalışır . Bunun, alan içeriğinin birden fazla sözcük olmasıyla ilgisi yoktur. Joker karakterli sorgunuzda "ozzy merhaba" eşleşecektir.