در Elasticsearch میتوان جستجوی تماممتنی (Full-text search) را با فیلترهای دقیق ترکیب کرد تا نتایج دقیقتر و مرتبطتر دریافت شود. برای این کار از Query DSL استفاده میکنیم.
مثال: جستجوی محصول بر اساس متن و فیلتر برند و محدوده قیمت
GET /products/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "Laptop"
}
}
],
"filter": [
{
"term": {
"brand.keyword": "Dell"
}
},
{
"range": {
"price": {
"gte": 2000,
"lte": 3000
}
}
}
]
}
}
}
توضیح ساختار
- must: شرایط جستجوی متن که باید در سند وجود داشته باشد. در اینجا نام محصول شامل "Laptop" است.
- filter: فیلترهایی که بدون تأثیر بر امتیاز (score) نتایج اعمال میشوند. در این مثال برند دقیقاً "Dell" و قیمت بین 2000 تا 3000 است.
نمونه نتیجه خروجی
{
"hits": {
"total": 2,
"hits": [
{
"_id": "1",
"_source": {
"product_id": 1,
"name": "Laptop Pro 15",
"brand": "Dell",
"price": 2500.50,
"available": true
}
},
{
"_id": "3",
"_source": {
"product_id": 3,
"name": "Laptop Air 13",
"brand": "Dell",
"price": 2200.00,
"available": true
}
}
]
}
}
با استفاده از ترکیب Full-text search و filter، میتوان جستجوی پیشرفته و دقیق در Elasticsearch انجام داد و نتایج مرتبط و بهینه دریافت کرد.