Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kajian mendalam tentang sintaks pertanyaan Elasticsearch dan pertempuran praktikal

Kajian mendalam tentang sintaks pertanyaan Elasticsearch dan pertempuran praktikal

WBOY
WBOYasal
2023-10-03 08:42:22793semak imbas

深入学习 Elasticsearch 查询语法与实战

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

  1. 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"
     }
      }
    }
  2. 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"
     }
      }
    }
  3. 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"
       }
     }
      }
    }
  4. 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:

  1. Penapis istilah: penapis berdasarkan nilai tepat medan.
  2. Penapis julat: Penapis berdasarkan julat medan.
  3. Penapis wujud: Tapis berdasarkan sama ada medan itu wujud.
  4. Penapis bool: menggabungkan berbilang keadaan penapis.

4. Isih
Dalam hasil pertanyaan, kita boleh mengisih berdasarkan nilai medan yang ditentukan. Kaedah pengisihan yang biasa digunakan ialah:

  1. Isihan medan: Isih mengikut nilai medan yang ditentukan.
  2. Isih skor: Isih dokumen mengikut kaitannya.

5 Paging
Untuk mengelak daripada memulangkan terlalu banyak data pada satu masa, kami boleh menomborkan hasil pertanyaan. Kaedah paging yang biasa digunakan ialah:

  1. From/Size paging: nyatakan kedudukan permulaan dan kuantiti hasil yang dikembalikan melalui parameter dari dan saiz.
  2. Tatal paging: Gunakan scroll API untuk paging.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn