ovu*_*tin 6 querying aggregate-functions elasticsearch
我使用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]
}
]
Run Code Online (Sandbox Code Playgroud)
假设我需要取平均成绩大于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; "
}
}
}
Run Code Online (Sandbox Code Playgroud)
我测试的数据:
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]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2165 次 |
| 最近记录: |