我正在构建一个满足条件> = avg。
的ES查询以下是一个例子:
GET /_search
{
"size" : 0,
"query" : {
"filtered": {
"filter": {
"range": {
"price": {
"gte": {
"aggs" : {
"single_avg_price": {
"avg" :{
"field" : "price"
}
}
}
}
}
}
}
}
}
}
我收到以下错误
"type": "query_parsing_exception",
"reason": "[range] query does not support [aggs]",
我想知道如何在弹性查询
中使用聚合值和范围查询答案 0 :(得分:1)
您无法在查询中嵌入聚合。您需要首先发送聚合查询以找出平均值,然后使用获得的平均值发送第二个范围查询。
查询1:
POST /_search
{
"size": 0,
"aggs": {
"single_avg_price": {
"avg": {
"field": "price"
}
}
}
}
然后你得到平均价格,比如它是12.3
并在你的第二个查询中使用它,如下所示:
查询2:
POST /_search
{
"size": 10,
"query": {
"filtered": {
"filter": {
"range": {
"price": {
"gte": 12.3
}
}
}
}
}
}
答案 1 :(得分:0)
尝试使用bucket selector等不同的ES聚合后,我发现可以使用python完成。
这是我为解决此问题而创建的python代码。 请注意:在运行之前,需要填写网址,USER_NAME,PASSWORD。
"eslintConfig": {
"env": {
"es6": true,
"node": true,
"browser": true
},
"rules": {
"quotes": [
2,
"single"
]
}
}