توی مطالب قبلی هنگام ارسال درخواست و در قسمت 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" }}}
]
}
}
}
elasticsearch