احسان رضایی

یک توسعه دهنده، شاید هم نه.


معنی و مفهوم query و filter در elasticsearch

در elasticsearch , / تاریخ ارسال 1398/10/11 - 00:37 / 0 نظر / 23 بازدید / آخرین ویرایش 1398/11/29 - 20:20

توی مطالب قبلی هنگام ارسال درخواست و در قسمت body از عبارت query برای جستجوهامون استفاده کردیم.

{
  ...
    "multi_match": {
      "query": "guide"
    }
  ...
}

در واقع query به این سوال پاسخ میده: چقدر اسناد موجود با مقدار query(در اینجا guide) مطابقت داره. الستیک سرچ میزان این مطابقت رو در خروجی درخواست و متا فیلد score_ محاسبه میکنه و قرار میده. مرتب سازی/sort خروجی هم بر همین اساس و معیاره.

اما filter به دنبال این پاسخ هست که: آیا اسناد موجود با مقادیر یا عبارات مورد نظر ما مطابقت دارن؟ مشخصه که جواب آره یا نه هست و میزانی مثل score_ وجود نداره. دقیقا از نامش پیداست، برای فیلتر کردن اسناد استفاده میشه مثلا:
- آیا زمان انتشار اسناد بین 2019 تا 2020 هست؟
- آیا وضعیت اسناد در حالت انتشار قرار داره؟
- و...

GET /_search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }},
        { "match": { "content": "Elasticsearch" }}
      ],
      "filter": [ 
        { "term":  { "status": "published" }},
        { "range": { "publish_date": { "gte": "2020-01-01" }}}
      ]
    }
  }
}

پیشنهاد

ارسال نظر