我正在尝试开发一个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包装的正确语法是什么?
答案 0 :(得分:0)
嵌套上下文:
"aggs" : {
"root" : {
"nested" : {
"path" : "manufacturerInfo"
}
},
必须与reverse_nested {}一起使用 - 在引用父对象的binned属性之前插入的嵌套aggs语法:
"aggs" : {
"products" : {
"reverse_nested" : {}, "aggs" : { "productNames" : {
"terms" : {
"field" : "productName.keyword"
} } }
}
}