LINUX.ORG.RU

Elasticsearch, агрегация с фильтрацией.

 ,


0

1

Есть индекс товаров (products). Пример документа, который находится в индексе:

{
    "product_id": <>,
    "title": <>,
    "type": <>,
    ...
}

Хочу сделать группировку продуктов по типу, НО!, чтобы в каждой группе был хотя бы один продукт с типом, например «aim».

Абстрагируясь от данных, задача может звучать так: сгруппировать документы по полю 'A', но исключить/не_создавать группы, в которых нет хотя бы одного документа со значением 'X', поля 'Y'.

У меня пока есть такой запрос.

{
    "aggs": {
        "buckets": {
            // группирую документы по title'у
            "terms": {
                "field": "title",
            },
            "aggs": {
                // возвращаю в результатах группировки документы целиком
                "products": {
                    "top_hits": {
                        "_source": True,
                    },
                },
            },
        },
    }
}

но он не влючает часть «исключить/не_создавать группы, в которых нет хотя бы одного документа со значением 'X', поля 'Y'.».

Кто имел дело с подобными кейзами в ES, подскажите, пожалуйста.


Ответ на: комментарий от maxcom

Не понял твоей идеи.

Мне ведь нужно получить группы документов, но чтоб в каждой группе был хотя бы один продукт с определеннным типом. А если предварительно отфильтровать докумиенты только лишь по целевому типу, то останутся толко они.

Скорее всего я не понял, что ты имел в виду. Не мог бы ты пояснить?

djnoob
() автор топика
Последнее исправление: djnoob (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.