Фасетований пошук в Elasticsearch
Фасетований пошук (фільтри + агрегації) допомагає користувачам звузити результати: фільтрування за категорією, діапазоном ціни, рейтингом.
Агрегації для фасетів
GET /products/_search
{
"query": {
"match": { "name": "ноутбук" }
},
"aggs": {
"categories": {
"terms": {
"field": "category.keyword",
"size": 10
}
},
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{ "to": 500 },
{ "from": 500, "to": 1000 },
{ "from": 1000, "to": 2000 },
{ "from": 2000 }
]
}
},
"brands": {
"terms": {
"field": "brand.keyword",
"size": 20
}
}
}
}
Відповідь:
{
"aggregations": {
"categories": {
"buckets": [
{ "key": "electronics", "doc_count": 45 },
{ "key": "computers", "doc_count": 38 }
]
},
"price_ranges": {
"buckets": [
{ "to": 500, "doc_count": 12 },
{ "from": 500, "to": 1000, "doc_count": 28 }
]
}
}
}
Фільтр + агрегація
GET /products/_search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "ноутбук" } }
],
"filter": [
{ "term": { "category.keyword": "computers" } },
{ "range": { "price": { "gte": 500, "lte": 1500 } } }
]
}
},
"aggs": {
"brands": {
"terms": { "field": "brand.keyword", "size": 20 }
},
"ratings": {
"range": {
"field": "rating",
"ranges": [
{ "from": 4 }, // 4+ зірок
{ "from": 3, "to": 4 } // 3-4 зірки
]
}
}
},
"size": 20,
"from": 0
}







