term
kueri cocok dengan satu istilah sebagaimana adanya: nilai tidak dianalisis . Jadi, tidak harus dalam huruf kecil tergantung pada apa yang telah Anda indeks.
Jika Anda memberikan Bennett
pada waktu indeks dan nilainya tidak dianalisis, kueri berikut tidak akan mengembalikan apa pun:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
query akan menganalisis masukan jika penganalisis ditentukan untuk bidang yang ditanyakan dan menemukan dokumen yang cocok dengan kriteria berikut:
- semua istilah harus muncul di lapangan
- mereka harus memiliki urutan yang sama dengan nilai masukan
Misalnya, jika Anda mengindeks dokumen berikut (menggunakan standard
penganalisis untuk bidang tersebut foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
Ini match_phrase
permintaan hanya akan mengembalikan dokumen pertama dan kedua:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
pencarian kueri, secara default, pada bidang _all yang berisi teks dari beberapa bidang teks sekaligus. Selain itu, ini diurai dan mendukung beberapa operator (AND / OR ...), wildcard, dan seterusnya (lihat sintaks terkait ).
Sebagai match_phrase
kueri, masukan dianalisis sesuai dengan set penganalisis di bidang kueri.
Berbeda dengan match_phrase
, istilah yang diperoleh setelah analisis tidak harus berada dalam urutan yang sama, kecuali pengguna telah menggunakan tanda kutip di sekitar input.
Misalnya, menggunakan dokumen yang sama seperti sebelumnya, kueri ini akan mengembalikan semua dokumen:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Tapi kueri ini akan mengembalikan 2 dokumen yang sama dengan match_phrase
kueri:
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
Masih banyak lagi yang bisa dikatakan tentang opsi yang berbeda untuk kueri tersebut, silakan lihat dokumentasi terkait:
Semoga ini cukup jelas dan ini akan membantu.
match
kueri menggunakan penganalisis jika bidang dianalisis, jadi ya. Secara default, ini akan mengembalikan dokumen yang memiliki setidaknya satu istilah (lihat parameteroperator
) dan urutannya tidak penting.Saya pikir seseorang pasti mencari perbedaan di antara mereka sehubungan dengan PENCARIAN SEBAGIAN Berikut adalah analisis saya dengan 'penganalisis standar' default : -
{"name": “Halo”}
Sekarang bagaimana jika kita ingin melakukan pencarian parsial dengan ell ???
Tidak akan berhasil, kembali mencatat.
Tidak akan berhasil, kembali mencatat.
Kesimpulan - Istilah atau Kecocokan sama sekali tidak dapat melakukan pencarian parsial
Akan berhasil memberikan hasil {"name": "Hello"}
Tidak akan berhasil, kembali mencatat.
Kesimpulan - wildcard dapat melakukan pencarian parsial hanya dengan satu token
Akan berhasil memberikan hasil {"name": “Hello”}
Akan berhasil memberikan hasil {"name": “Hello”}.
Kesimpulan - query_string dapat mencari dengan dua token yang diberikan
-> di sini token adalah ell dan zz
sumber
wildcard is able to do partial search with one token only
: lebih tepatnya,wildcard
kueri secara default hanya berfungsi padakeyword
bidang , yang menurut definisi token tunggal. Itu tidak ada hubungannya dengan isi field lebih dari satu kata. Dalam kueri karakter pengganti Anda, "ozzy hello" akan cocok.