我正在尝试在 flex 搜索中创建汇总结果,但过滤器选项对我不起作用。
我可以在没有过滤器的情况下聚合数据
select name , material ,sum(price)
from products group by name , material
curl -XGET 'http://localhost:9200/products/_search?pretty=true' -d'
{
"aggs" : {
"product" : {
"terms" : {
"field" : "name"
},
"aggs" : {
"material" : {
"terms" : {
"field" : "material"
},
"aggs" : {
"sum_price" : {
"sum" : {
"field" : "price"
}
}
}
}
}
}
},
"size" : 0
}'
但是我在编写等效的DSL查询时遇到了问题:
select name , material ,sum(price)
from products
where material = "wood"
group by name , material
最佳答案
应该是这样的:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"material": "wood"
}
}
}
},
"aggs" : {
"product" : {
"terms" : {
"field" : "name"
},
"aggs" : {
"material" : {
"terms" : {
"field" : "material"
},
"aggs" : {
"sum_price" : {
"sum" : {
"field" : "price"
}
}
}
}
}
}
},
"size" : 0
}
如果您知道确切的值并且不需要匹配,请使用过滤器,否则请使用匹配查询而不是过滤后的查询。