Saya tidak dapat melihat deskripsi kapan saya harus menggunakan kueri atau filter atau kombinasi keduanya. Apa perbedaan di antara mereka? Adakah yang bisa menjelaskannya?
elasticsearch
Jonesie
sumber
sumber
Jawaban:
Perbedaannya sederhana: filter di-cache dan tidak memengaruhi skor, karena itu lebih cepat daripada kueri. Lihat di sini juga. Katakanlah kueri biasanya adalah sesuatu yang diketik pengguna dan tidak dapat diprediksi, sementara filter membantu pengguna mempersempit hasil pencarian, misalnya menggunakan aspek.
sumber
Inilah yang dikatakan dokumentasi resmi:
sumber
Contoh (coba sendiri)
Say index
myindex
berisi tiga dokumen:Permintaan
hello sam
(menggunakan kata kuncimust
)Dokumen
"Hello world! I am Sam."
diberi skor lebih tinggi daripada"Hello world!"
, karena yang pertama cocok dengan kedua kata dalam kueri. Dokumen diberi skor.Filter
hello sam
(menggunakan kata kuncifilter
)Dokumen yang mengandung salah satu
hello
atausam
dikembalikan. Dokumen TIDAK diberi skor .Kecuali Anda membutuhkan pencarian teks penuh atau penilaian, filter lebih disukai karena filter yang sering digunakan akan di-cache secara otomatis oleh Elasticsearch, untuk mempercepat kinerja. Lihat Elasticsearch: Konteks kueri dan filter.
sumber
Lebih sedikit tambahan untuk hal yang sama. Filter diterapkan terlebih dahulu dan kemudian kueri diproses atas hasilnya. Untuk menyimpan biner true / false match per dokumen, sesuatu yang disebut bitSet Array digunakan. Array BitSet ini ada dalam memori dan ini akan digunakan dari kedua kalinya filter ditanyai. Dengan cara ini, menggunakan struktur data bitset array, kami dapat memanfaatkan hasil cache.
Satu hal lagi yang perlu diperhatikan di sini, cache filter dibuat hanya ketika permintaan dieksekusi maka hanya dari klik kedua, kita benar-benar mendapatkan keuntungan dari caching.
Tapi kemudian Anda bisa menggunakan API yang lebih hangat , untuk mengatasi hal ini. Saat Anda mendaftarkan kueri dengan filter terhadap API yang lebih hangat, itu akan memastikan bahwa ini dijalankan terhadap segmen baru setiap kali itu ditayangkan. Karenanya kita akan mendapatkan kecepatan yang konsisten dari eksekusi pertama itu sendiri.
sumber
Pada dasarnya, kueri digunakan ketika Anda ingin melakukan pencarian pada dokumen Anda dengan penilaian. Dan filter digunakan untuk mempersempit himpunan hasil yang diperoleh dengan menggunakan kueri. Filter adalah boolean.
Misalnya katakan Anda memiliki indeks restoran seperti zomato. Sekarang Anda ingin mencari restoran yang menyajikan 'pizza' , yang pada dasarnya adalah kata kunci pencarian Anda.
Jadi, Anda akan menggunakan kueri untuk menemukan semua dokumen yang mengandung "pizza" dan beberapa hasil akan diperoleh.
Katakan sekarang Anda ingin daftar restoran yang menyajikan pizza dan memiliki peringkat minimal 4.0.
Jadi yang harus Anda lakukan adalah menggunakan kata kunci "pizza" dalam permintaan Anda dan menerapkan filter untuk peringkat sebagai 4.0.
Apa yang terjadi adalah bahwa filter biasanya diterapkan pada hasil yang diperoleh dengan menanyakan indeks Anda.
sumber
Filters
-> Apakah dokumen ini cocok? biner ya atau tidak jawabannyaQueries
-> Apakah dokumen ini cocok? Seberapa baik cocok? menggunakan penilaiansumber
Karena versi 2 dari Elasticsearch, filter dan kueri telah digabung dan setiap klausa kueri dapat digunakan sebagai filter atau kueri (tergantung pada konteksnya). Seperti dengan versi 1, filter di-cache dan harus digunakan jika penilaian tidak masalah.
Sumber: https://logz.io/blog/elasticsearch-queries/
sumber