我的索引如下:
cargroup
"mappings": {
"properties": {
"id": { "type": "integer" },
"cars": { "type": "nested",
"properties": {
"brand": {
"type": "keyword"
},
"value": {
"type": "integer"
}
}
},
我如何只获得价值总和> 100的'丰田'品牌的汽车集团? (价值总和仅在“丰田”品牌中计算)
例如给出以下文件:
[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}
]]
我只想获取3号文档,因为它的丰田汽车的总和是(80 + 30 = 110)大于100
我曾使用术语和过滤聚合将汽车组划分为“ id”存储桶,然后在每个存储桶上使用总和聚合。但是,我还没有找到一种将每个汽车组“链接”到其对应的存储桶以进行后续过滤的方法。
我的要求类似于嵌套排序功能。我可以为嵌套字段提供路径和过滤逻辑,然后使用排序模式聚合结果。我需要类似的过滤功能。
此查询应返回包含汽车类型= Toyota并且值大于100的所有文档
{
"query":{
"bool":{
"filter":[
{
"nested":{
"path":"cars",
"query":{
"bool":{
"must":[
{
"term":{
"cars.brand":"toyota"
}
},
{
"range":{
"cars.value":{
"gt":100
}
}
}
]
}
}
}
}
]
}
}}
并且,如果您正在寻找聚合的嵌套过滤,则可以检查此链接https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-nested-aggregation.html