Я пытаюсь использовать elasticsearch (ВЕРСИЯ 7.8.0) для выполнения многогранного поиска, и у меня что-то получилось. Однако я хочу удалить выбранные фильтры из моих возвращенных агрегатов. Например. Если у меня есть магазин по продаже одежды, и я фильтрую товары по цвету: красный, то я не хочу, чтобы цвет: красный появлялся в моих агрегатах, так как он уже выбран.
Для выполнения моих фильтров у меня есть следующее вложенное поле в моих примерах продуктов:
"search_filters" : {
"type" : "nested",
"properties" : {
"key" : {
"type" : "keyword"
},
"value" : {
"type" : "keyword"
}
}
},
Итак, если бы у меня были данные вроде
"search_filters" : [
{
"key" : "colour",
"value" : "red"
}
]
Затем я выполняю поиск, например:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "search_filters",
"query": {
"bool": {
"must": [
{
"match": {
"search_filters.key": "colour"
}
},
{
"match": {
"search_filters.value": "red"
}
}
]
}
}
}
}
]
}
},
"aggs": {
"filters": {
"nested": {
"path": "search_filters"
},
"aggs": {
"search_keys": {
"terms": {
"field": "search_filters.key"
},
"aggs": {
"search_values": {
"terms": {
"field": "search_filters.value"
}
}
}
}
}
}
}
}
Это дает мне правильные документы, но мои агрегаты показывают цвет: красный.
{
...
"filters": {
"doc_count": 31,
"search_keys": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "colour",
"doc_count": 31,
"search_values": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "red",
"doc_count": 31
}
...
]
}
}
...
]
}
}
}
Есть ли способ исключить их из elasticsearch или мне нужно вручную анализировать и игнорировать/удалять выбранные фильтры?
Я видел использование фильтра в части поля агрегации запроса, но не смог заставить его работать с моим полем фильтра; особенно когда я применил более одного фильтра, например. цвет и размер.
"search_filters.value": "red"
? - person ESCoder   schedule 16.02.2021