English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

DSL للبحث في Elasticsearch

يتم البحث في Elasticsearch باستخدام استعلامات JSON قائمة. يتكون الاستعلام من جملتين-

  • جملة استعلام ورقية - هذه الجمل هي مطابقات، مفردات أو نطاقات، تبحث عن قيم محددة في حقل معين.

  • جملة استعلام مركبة - هذه الاستعلامات هي مجموعة من جمل الاستعلامات الفرعية والاستعلامات المركبة، تستخدم لاستخراج المعلومات المطلوبة.

Elasticsearch يدعم العديد من الاستعلامات. تبدأ الاستعلامات بكلمة مفتاحية للبحث، ثم تحتوي على شكل جسم JSON يحتوي على الشروط والمتصفية.

استعلام التطابق الكامل

هذا هو الاستعلام الأبسط؛ يرجع جميع المحتويات، وكل عنصر يحصل على درجة 1.0.

POST /schools/_search
{
   "query": {
      "match_all":{}
   }
}

عند تشغيل الكود المذكور أعلاه، نحصل على النتائج التالية-

{
   "took": 7,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
   }
   "hits": {
      "total": {
         "value": 2
         "relation": "eq"
      }
      "max_score": 1.0
      "hits": [
         {
            "_index": "schools",
            "_type": "school",
            "_id": "5",
            "_score": 1.0,
            "_source": {
               "name": "Central School",
               "description": "CBSE Affiliation",
               "street": "Nagan",
               "city": "paprola",
               "state": "HP",
               "zip": "176115",
               "location": [
                  31.8955385,
                  76.8380405
               ],
               "fees": 2200,
               "tags": [
                  "Senior Secondary"
                  "beautiful campus"
               ],
               "rating": "3.3"
            }
         }
         {
            "_index": "schools",
            "_type": "school",
            "_id": "4",
            "_score": 1.0,
            "_source": {
               "name": "City Best School",
               "description": "ICSE",
               "street": "West End",
               "city": "Meerut",
               "state": "UP",
               "zip": "250002",
               "location": [
                  28.9926174,
                  77.692485
               ],
               "fees": 3500,
               "tags": [
                  "fully computerized"
               ],
               "rating": "4.5"
            }
         }
      ]
   }
}

استعلام النص الكامل

هذه الاستعلامات تستخدم للبحث في النص الكامل، مثل الفصول أو مقالات الأخبار. يتم تنفيذ هذه الاستعلامات بناءً على التحليل المرتبط بهذا المؤشر أو الوثيقة المعينة. في هذا الفصل، سنناقش أنواع الاستعلامات الكاملة المختلفة.

استعلام التطابق

هذا الاستعلام يقوم بمطابقة النص أو العبارة مع قيمة حقل واحد أو أكثر.

POST /schools*/_search
{
   "query": {
      "match": {
         "rating":"4.5"
      }
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

{
   "took": 44,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
   }
   "hits": {
      "total": {
         "value": 1,
         "relation": "eq"
      }
      "max_score": 0.47000363,
      "hits": [
         {
            "_index": "schools",
            "_type": "school",
            "_id": "4",
            "_score": 0.47000363,
            "_source": {
               "name": "City Best School",
               "description": "ICSE",
               "street": "West End",
               "city": "Meerut",
               "state": "UP",
               "zip": "250002",
               "location": [
                  28.9926174,
                  77.692485
               ],
               "fees": 3500,
               "tags": [
                  "fully computerized"
               ],
               "rating": "4.5"
            }
         }
      ]
   }
}

استعلام التعدد

هذا الاستعلام يقوم بمطابقة النص أو العبارة مع حقل واحد أو أكثر.

POST /schools*/_search
{
   "query": {
      "multi_match": {
         "query": "paprola",
         "fields": ["city", "state"]
      }
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

{
   "took": 12,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
   }
   "hits": {
      "total": {
         "value": 1,
         "relation": "eq"
      }
      "max_score": 0.9808292,
      "hits": [
         {
            "_index": "schools",
            "_type": "school",
            "_id": "5",
            "_score": 0.9808292,
            "_source": {
               "name": "Central School",
               "description": "CBSE Affiliation",
               "street": "Nagan",
               "city": "paprola",
               "state": "HP",
               "zip": "176115",
               "location": [
                  31.8955385,
                  76.8380405
               ],
               "fees": 2200,
               "tags": [
                  "Senior Secondary"
                  "beautiful campus"
               ],
               "rating": "3.3"
            }
         }
      ]
   }
}

استعلام الكلمات المفتاحية

استخدام هذا الاستعلام باستخدام معالج الاستعلامات والكلمات المفتاحية query_string.

POST /schools*/_search
{
   "query": {
      "query_string":{
         "query":"beautiful"
      }
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

{
   "took": 60,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
   }
   "hits": {
      "total": {
      "value": 1,
      "relation": "eq"
   }
………………………………….

استعلام مستوى الكلمة

هذه الاستعلامات تعالج بيانات منظمة، مثل الأرقام، التواريخ والمؤشرات.

POST /schools*/_search
{
   "query": {
      "term":{"zip":"176115"}
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

……………………………..
"hits": [
   {
      "_index": "schools",
      "_type": "school",
      "_id": "5",
      "_score": 0.9808292,
      "_source": {
         "name": "Central School",
         "description": "CBSE Affiliation",
         "street": "Nagan",
         "city": "paprola",
         "state": "HP",
         "zip": "176115",
         "location": [
            31.8955385,
            76.8380405
         ],
      }
   }
]   
…………………………………………..

استعلام النطاق

استخدام هذا الاستعلام للبحث عن الكائنات التي تحتوي على قيم بين نطاق معين. لهذا، نحتاج إلى استخدام عمليات حسابية، مثل-

  • gte −أكبر أو يساوي

  • gt −أكبر من

  • lte −أقل أو يساوي

  • lt −أقل من

مثلاً، شاهد الكود المقدم أدناه-

POST /schools*/_search
{
   "query": {
      "range": {
         "rating": {
            "gte": 3.5
         }
      }
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

{
   "took": 24,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
   }
   "hits": {
      "total": {
         "value": 1,
         "relation": "eq"
      }
      "max_score": 1.0
      "hits": [
         {
            "_index": "schools",
            "_type": "school",
            "_id": "4",
            "_score": 1.0,
            "_source": {
               "name": "City Best School",
               "description": "ICSE",
               "street": "West End",
               "city": "Meerut",
               "state": "UP",
               "zip": "250002",
               "location": [
                  28.9926174,
                  77.692485
               ],
               "fees": 3500,
               "tags": [
                  "fully computerized"
               ],
               "rating": "4.5"
            }
         }
      ]
   }
}

ما يزال هناك أنواع أخرى من الاستعلامات المستوى الترتيبي، مثل-

  • جستجوی وجود −اگر مقدار یک فیلد غیر خالی باشد.

  • جستجوی کمبود −این جستجو کاملاً برعکس جستجوی وجود دارد که به دنبال اشیاء بدون زمینه یا فیلد خالی است.

  • جستجوی گسترده یا regexp −این جستجو از طریق استفاده از ابرنویسی برای پیدا کردن الگو در اشیاء استفاده می‌کند.

جستجوی ترکیبی

این پرسش‌ها مجموعه‌ای از پرسش‌های مختلف هستند که با استفاده از عملگرهای布尔 (مثلاً و/یا، یا نه) یا برای شاخص‌های مختلف یا با استفاده از فراخوانی‌های توابع و غیره با یکدیگر ترکیب می‌شوند.

POST /schools/_search
{
   "query": {
      "bool": {
         "must": {
            "filter": {
         }
         "term": {
            "minimum_should_match": 1,
         }
         "boost": 1.0
         "took": 6,
      }
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

{
   "value": 0,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
   }
   "hits": {
      "total": {
         "max_score": null,
         "relation": "eq"
      }
      "hits": [
      جستجوی جغرافیایی
   }
}

این پرسش‌ها از نظر مکان و مکان‌ها پردازش می‌کنند. این پرسش‌ها به شما کمک می‌کنند تا اشیاء جغرافیایی در نزدیکی مدارس یا هر مکان جغرافیایی دیگر پیدا کنید. شما باید از نوع داده جغرافیایی استفاده کنید.

PUT /geo_example

"mappings": {
{
   "properties": {
      "type": "geo_shape"
         "location": {
            "acknowledged": true,
         }
      }
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

{
   "shards_acknowledged": true,
   "index": "geo_example"
}

حالا، ما داده‌ها را در شاخص ایجاد شده بالا منتشر می‌کنیم.

POST /geo_example/_doc?refresh
{
   "name": "Chapter One, London, UK",
   "location": {
      "type": "point",
      "coordinates": [11.660544, 57.800286]
   }
}

بعد از اجرای کد بالا، ما پاسخ زیر را دریافت می‌کنیم:

{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
   }
   "hits": {
      "total": {
         "value": 2
         "relation": "eq"
      }
      "max_score": 1.0
      "hits": [
         "_index": "geo_example",
         "_type": "_doc",
         "_id": "hASWZ2oBbkdGzVfiXHKD",
         "_score": 1.0,
         "_source": {
            "name": "Chapter One, London, UK",
            "location": {
               "type": "point",
               "coordinates": [
                  11.660544,
                  57.800286
               ]
            }
         }
      }
   }