假设我有一个嵌套文档的索引,如下所示:
{
"id" : 1234
"cars" : [{
"id" : 987
"name" : "Volkswagen"
}, {
"id": 988
"name" : "Tesla"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我现在想要获得符合特定标准的"汽车"文档的计数聚合,例如匹配搜索查询.我最初的尝试是以下查询:
{
"query" : {
"nested" : {
"path" : "cars",
"query" : {
"query_string" : {
"fields" : ["cars.name"],
"query" : "Tes*"
}
}
}
},
"aggregations" : {
"cars" :{
"nested" : {
"path" : "cars"
},
"aggs" : {
"cars" : {
"terms" : {
"field" : "cars.id"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望在这里得到一个聚合结果,只有名称以"Tes"开头的汽车的ID.但是,聚合反而使用顶级文档中的所有汽车,这些汽车也包含匹配的嵌套文档.也就是说,在上面的示例中,"Volkswagen"也会被计算在内,因为顶级文档还包含匹配的汽车.
如何只获得匹配的嵌套文档的聚合?
Tid*_*ddo 10
与此同时,我已经明白了:要实现这一目标,应在术语聚合周围添加过滤器聚合,如下所示:
"aggregations" : {
"cars" :{
"nested" : {
"path" : "cars"
},
"aggs" : {
"cars-filter" : {
"filter" : {
"query" : {
"query_string" : {
"fields" : ["cars.name"],
"query" : "Tes*"
}
}
},
"aggs" : {
"cars" : {
"terms" : {
"field" : "cars.id"
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5394 次 |
| 最近记录: |