嵌套属性上具有分组依据的ElasticSearch聚合

时间:2018-05-24 19:02:07

标签: elasticsearch nested aggregate

我正在尝试开发一个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"
         }
     },
     ...
 }

此上下文似乎不允许基于产品对象的根进行项目分级。

将与嵌套的manufacturerInfo对象中指定的manufacturerNames对应的productNames包装的正确语法是什么?

1 个答案:

答案 0 :(得分:0)

嵌套上下文:

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

必须与reverse_nested {}一起使用 - 在引用父对象的binned属性之前插入的嵌套aggs语法:

    "aggs" : {
        "products" : {
            "reverse_nested" : {}, "aggs" : { "productNames" : { 
            "terms" : {
                "field" : "productName.keyword"
            } } }
        }
    }
相关问题