我正在使用 elasticsearch 0.90.10,我想使用带有聚合函数的查询对其进行搜索,例如 sum()
、avg( )
, min()
。
假设我的数据是这样的
[
{
"name" : "Alice",
"grades" : [40, 50, 60, 70]
},
{
"name" : "Bob",
"grades" : [10, 20, 30, 40]
},
{
"name" : "Charlie",
"grades" : [70, 80, 90, 100]
}
]
假设我需要获取平均成绩大于 75 的学生(即 avg(grades) >= 75
)。我如何使用 DSL、过滤器或脚本在 ES 中编写这样的查询?
提前致谢。
最佳答案
新ES 1.0.0.RC1那可能有更好的方法来使用聚合来做到这一点但是这里有一个简单的(非常冗长的)脚本可以工作:
POST /test_one/grades/_search
{
"query" : {
"match_all": {}
},
"filter" : {
"script" : {
"script" : " sum=0; foreach( grade : doc['grades'].values) { sum = sum + grade }; avg = sum/doc['grades'].values.length; avg > 25; "
}
}
}
我测试的数据:
POST /test_one/grades
{
"name": "chicken",
"grades": [35,55,65]
}
POST /test_one/grades
{
"name": "pork",
"grades": [15,35,45]
}
POST /test_one/grades
{
"name": "kale",
"grades": [5,10,20]
}
关于elasticsearch - 在 Elasticsearch 查询中使用聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254837/