Агрегация ElasticSearch с Group By по вложенному свойству - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь разработать запрос агрегации ElasticSearch, который выполняет группирование результатов на основе свойства вложенного объекта.

product :
{
    productName : String,
    manufacturerInfo : {
        manufacturerName : String
    }
}

Соответствующие сопоставления настроены для индекса.

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

{
    "size" : 0,
    "aggs" : {
        "manufacturers" : {
            "terms" : {
                "field" : "manufacturerInfo.manufacturerName.keyword"
            }
        },
        "aggs" : {
            "productNames" : {
                "terms" : {
                    "field" : "productName.keyword"
                }
            }
        }
    }
}

Запрос должен быть сгруппирован по имени вложенного свойства, но по свойствам bin из корневого объекта, и это, похоже, вызывает некоторые проблемы в ElasticSearch.

Когда предпринята попытка прекатенировать следующее:

"aggs" : {
    "root" : {
        "nested" : {
            "path" : "manufacturerInfo"
         }
     },
     ...
 }

не представляется, что этот контекст позволяет объединять элементы на основе корня объекта продукта.

Что такоеправильный синтаксис для создания binN productNames, соответствующего factoryNames, указанному во вложенных объектах ManufacturerInfo?

1 Ответ

0 голосов
/ 24 мая 2018

Вложенный контекст:

"aggs" : {
    "root" : {
        "nested" : {
            "path" : "manufacturerInfo"
         }
     },

должен использоваться в сочетании с синтаксисом вложенных aggs reverse_nested {} -, который вставляется перед ссылкой на свойство родительского объекта, которое связано:

    "aggs" : {
        "products" : {
            "reverse_nested" : {}, "aggs" : { "productNames" : { 
            "terms" : {
                "field" : "productName.keyword"
            } } }
        }
    }
...