Yanıtlar:
termsorgu 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.
BennettDizin 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 ( standardalan için analizörü kullanarak foo):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
Bu match_phrasesorgu yalnızca birinci ve ikinci belgeleri döndürür:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_stringaynı 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_phrasesorgular, giriş sorgulanan alanın üzerinde analiz seti göre analiz edilir.
match_phraseKullanı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.
matchsorgu 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, wildcardsorgular 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.