Kajian mendalam tentang sintaks dan amalan pertanyaan Elasticsearch
Pengenalan:
Elasticsearch ialah enjin carian sumber terbuka berdasarkan Lucene, terutamanya digunakan untuk carian dan analisis yang diedarkan, dan digunakan secara meluas dalam carian teks penuh, analisis log, dan pengesyoran sistem data berskala besar dan senario lain. Apabila menggunakan Elasticsearch untuk pertanyaan data, penggunaan fleksibel sintaks pertanyaan adalah kunci untuk meningkatkan kecekapan pertanyaan. Artikel ini akan menyelidiki sintaks pertanyaan Elasticsearch dan memberikan contoh kod terperinci berdasarkan kes sebenar.
1. Gambaran Keseluruhan
Sintaks pertanyaan Elasticsearch menggunakan format JSON, yang terutamanya termasuk penyataan pertanyaan, syarat penapis, pengisihan, halaman dan fungsi lain. Dengan menggabungkan sintaks ini secara fleksibel, pelbagai pertanyaan data yang kompleks boleh dilaksanakan.
2. Pernyataan pertanyaan
Pertanyaan padanan:
Pertanyaan padanan ialah pertanyaan teks penuh yang paling asas, yang sepadan dengan hasil pertanyaan dalam medan tertentu berdasarkan kata kunci. Kod sampel adalah seperti berikut:
GET /index/_search { "query": { "match": { "field": "keyword" } } }
Pertanyaan istilah:
Pertanyaan istilah digunakan untuk memadankan nilai medan yang ditentukan dengan tepat. Kod sampel adalah seperti berikut:
GET /index/_search { "query": { "term": { "field": "value" } } }
Pertanyaan julat:
Pertanyaan julat digunakan untuk menanyakan nilai dalam julat medan yang ditentukan. Kod sampel adalah seperti berikut:
GET /index/_search { "query": { "range": { "field": { "gte": "start value", "lte": "end value" } } } }
Pertanyaan Bool:
Pertanyaan Bool digunakan untuk menggabungkan berbilang syarat pertanyaan dan menyokong perhubungan logik seperti mesti, mesti_tidak, harus, dsb. Kod sampel adalah seperti berikut:
GET /index/_search { "query": { "bool": { "must": [ { "match": { "field1": "value1" } }, { "match": { "field2": "value2" } } ], "must_not": { "term": { "field3": "value3" } }, "should": { "term": { "field4": "value4" } } } } }
3. Syarat penapis
Syarat penapis digunakan untuk mengehadkan julat hasil pertanyaan dan mengurangkan pengiraan yang tidak perlu. Syarat penapis yang biasa digunakan ialah:
4. Isih
Dalam hasil pertanyaan, kita boleh mengisih berdasarkan nilai medan yang ditentukan. Kaedah pengisihan yang biasa digunakan ialah:
5 Paging
Untuk mengelak daripada memulangkan terlalu banyak data pada satu masa, kami boleh menomborkan hasil pertanyaan. Kaedah paging yang biasa digunakan ialah:
6. Kes Praktikal
Berikut ialah kes praktikal untuk menunjukkan cara menggunakan sintaks pertanyaan Elasticsearch untuk pertanyaan data.
Kes: Cari kata kunci produk di tapak web e-dagang dan susun berdasarkan volum jualan dan harga.
GET /products/_search { "query": { "bool": { "must": [ { "match": { "name": "手机" } } ] } }, "sort": [ { "sales": "desc" }, { "price": "asc" } ] }
Dalam pertanyaan di atas, kami menggunakan pernyataan padanan dalam pertanyaan bool untuk mencari produk yang mengandungi "telefon mudah alih" dalam nama produk dan menggunakan parameter isihan untuk mengisih mengikut volum jualan dalam tertib menurun dan harga dalam tertib menaik.
Kesimpulan:
Artikel ini menyediakan kajian mendalam tentang sintaks pertanyaan Elasticsearch dan memberikan contoh kod terperinci melalui kes sebenar. Penggunaan fleksibel sintaks pertanyaan ini boleh meningkatkan kecekapan dan ketepatan pertanyaan data. Dalam projek sebenar, kita boleh menggunakan sintaks pertanyaan yang berbeza dalam kombinasi mengikut keperluan khusus untuk memenuhi senario pertanyaan data yang berbeza.
Atas ialah kandungan terperinci Kajian mendalam tentang sintaks pertanyaan Elasticsearch dan pertempuran praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!