Python ElasticsearchDSL: агрегация вложенных сегментов - PullRequest
0 голосов
/ 09 апреля 2020

Я ищу, чтобы получить вложенные сегменты корзины для FacetedSearch каталога продуктов. Каждый продукт имеет атрибуты (например, цвет: красный), и я хочу, чтобы результаты агрегации возвращали эквивалент:

{color: {
    red: 5,
    blue: 2
    ...
    }
}

Отображение для соответствующего поля выглядит следующим образом (с именем атрибута в имени ключ и значение в ключе value ).

"filter_product_attributes": {
    "type": "nested",
    "properties": {
        "name": {
            "type": "keyword"
        },
        "value": {
            "type": "keyword"
        }
    }
},

Я могу получить искомый результат, переопределив метод поиска следующим образом:

def search(self):
    s = super().search()
    s.aggs.bucket('filter_product_attributes', 'nested', path='filter_product_attributes') \
        .bucket('att_names', 'terms', field='filter_product_attributes.name') \
        .bucket('att_values', 'terms', field='filter_product_attributes.value')
    return s

Мне было интересно, есть ли способ сделать это непосредственно в настройках facets , когда я вызываю свой подкласс FacetedSearch? Заранее спасибо за любое руководство!

...