弹性搜索聚合与范围查询 [英] Elastic search aggregation with range query
本文介绍了弹性搜索聚合与范围查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在努力构建一个满足条件> = avg的ES查询。
I am working to build a ES query that satisfies the condition >= avg .
这是一个例子:
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]",
我想知道我们如何在弹性查询中使用范围查询的汇总值
I wonder how do we use aggregated value with range query in Elastic query
推荐答案
不同的ES汇总,例如桶选择器,我发现它可以使用python。
After I tried using different ES aggregations such as bucket selector , I found that it can be done using python.
这是我创建的python代码来解决这个问题。
请注意:URL,USER_NAME,PASSWORD需要在运行前填写。
Here is the python code I created to solve this issue. Please note: URL , USER_NAME , PASSWORD needs to be filled before run it.
#! /usr/bin/python
import sys,json,requests
from requests.auth import HTTPBasicAuth
# static variables
URL=''
USER_NAME=''
PASSWORD=''
# returns avg value
def getAvg():
query = json.dumps({
"aggs": {
"single_avg_price": {
"avg": {
"field": "price"
}
}
}
})
response = requests.get(URL,auth=HTTPBasicAuth(USER_NAME,PASSWORD), data=query)
results = json.loads(response.text)
return results['aggregations']['single_avg_price']['value']
#returns rows that are greater than avg value
def rows_greater_than_avg(avg_value):
query = json.dumps({
"query" : {
"range": {
"price": {
"gte":avg_value
}
}
}
})
response = requests.get(URL,auth=HTTPBasicAuth(USER_NAME,PASSWORD), data=query)
results = json.loads(response.text)
return results
# main method
def main():
avg_value = getAvg()
print( rows_greater_than_avg(avg_value))
main()
这篇关于弹性搜索聚合与范围查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文