Как выполнить фильтрацию по совокупности вложенных полей? (похоже на вложенную сортировку) - PullRequest
0 голосов
/ 30 января 2020

У меня есть индекс, как показано ниже:

cargroup

 "mappings": {
    "properties": {
      "id":     { "type": "integer" },
      "cars":   { "type": "nested",
                            "properties": {
                                    "brand": {
                                        "type": "keyword"
                                    },
                                    "value": {
                                        "type": "integer"
                                    }
                                }
                        },

Как я могу получить cargroup, которая имеет бренд 'toyota' с суммой стоимости> 100? (сумма значения рассчитывается только для бренда «toyota»)

, например, с учетом следующих документов:

[id: 1,
cars:[{
brand: toyota,
value: 30},
{
brand: toyota,
value: 30},
{
brand: honda,
value: 30}
],
id: 2,
cars:[{
brand: toyota,
value: 30},
{
brand: toyota,
value: 50},
{
brand: honda,
value: 30}
],
id: 1,
cars:[{
brand: toyota,
value: 30},
{
brand: toyota,
value: 80},
{
brand: honda,
value: 30}
]]

Я хотел бы получить только do c no 3, поскольку его toyota Сумма стоимости автомобилей равна (80 + 30 = 110) больше чем 100

Я использовал термины и отфильтрованное агрегирование, чтобы разделить группы автомобилей на Bucket 'id', а затем использовал агрегацию суммы в каждом бакете. Однако я не нашел способа «связать» каждую группу автомобилей с соответствующим сегментом для последующей фильтрации.

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

...