Например, если для граненого / агрегированного фильтра установлен фильтр, его следует исключить, чтобы мы не получили только один результат.
Если пользователь выбирает какую-либо марку, результат должен быть получен только с выбранной маркой, но агрегация должна возвращать все фильтры бренда, которые уже были там, чтобы пользователь мог выбрать и другие марки.
Как мы можем сделать это в Elasticsearch? То же самое можно получить в solr с помощью тегов и исключая фильтры
Используйте post_filter для фильтрации результатов поиска, но все равно покажите все данные в агрегации.
Увидеть Постфильтр:
Пост_фильтр применяется к поисковым хитам в самом конце
Поисковый запрос, после того как агрегаты уже рассчитаны. Это
Цель лучше всего объяснить на примере:
curl -XGET localhost:9200/shirts/_search -d '
{
"query": {
"filtered": {
"filter": {
{ "term": { "brand": "gucci" }}
}
}
},
"aggs": {
"colors": {
"terms": { "field": "color" },
},
"color_red": {
"filter": {
"term": { "color": "red" }
},
"aggs": {
"models": {
"terms": { "field": "model" }
}
}
}
},
"post_filter": {
"term": { "color": "red" },
}
}
'
Других решений пока нет …