Фасеты группировки ElasticSearch

У меня есть документ с такой структурой:

{
    id: 312256,
    name: "SomeName",
    filterBlocks: [{
            id: 0
            filterTypeId: 4
            filterItems: [
                1190
            ]
        }, {
            id: 0
            filterTypeId: 3
            filterItems: [
                353
            ]
        }, {
            id: 234
            filterTypeId: 1
            filterItems: [
                6342
            ]
        }
    ]
}

Для каждой отдельной комбинации filterBlocks.id+filterBlocks.filterTypeId мне нужны фасеты размера N в поле filterItems. Я пытаюсь использовать запрос типа:

{
    "query": {
        "match_all": {}
    },
    "facets": {
        "filterBlocks": {
            "terms": {
                "field": "filterBlocks.filterItems"
            }
        }
    }
}

Но, конечно, я получаю только N фасетов без группировки по filterBlocks.id+filterBlocks.filterTypeId

Что мне нужно изменить в моем запросе или структуре документа, чтобы все было правильно? Спасибо


person Alexander Karpinskiy    schedule 21.07.2013    source источник
comment
Таким образом, вам нужен либо динамический номер фасета (один фасет на комбинацию filterBlocks.id/filterBlocks.filterType), либо какая-то группировка, например GROUP BY filterTypeId. Насколько я знаю, ни то, ни другое невозможно с помощью elasticsearch.   -  person Michael Härtl    schedule 24.07.2013


Ответы (1)


Сначала вам нужно будет запросить все комбинации filterBlocks.id/filterBlocks.filterType, а затем выполнить итерацию по результатам, чтобы построить фасетный поиск с фасетным фильтром для каждой комбинации.

Использование аспекта терминов в первом запросе, вероятно, будет хорошим способом получить уникальный набор результатов.

person Phil    schedule 28.07.2013