如何在ElasticSearch中执行复杂计算,这需要在索引中查找条目的最大值和最小值?
以下示例很愚蠢,但为了说明,它可以达到目的。
给定一个正在保存到索引的对象User
:
class User {
String name
int age;
}
对于所有具有相同名称的用户,要求是获得最年轻和最老年龄之间的差异。
例如,给定以下数据集:
Name Age
Tom 20
Tom 35
Tom 45
Sam 10
Sam 50
Sam 90
计算将产生以下结果:
Tom = (45-20) = 25
Sam = (90-10) = 80
计算了ElasticSearch中的值后,需要在Kibana中访问它们。
我是ElasticSearch的新手,非常感谢任何代码示例。
答案 0 :(得分:0)
您可以从每个用户获得最小值和最大值,然后从客户端获得您需要执行的其余操作 -
{
"aggs": {
"users": {
"terms": {
"field": "Name"
},
"aggs": {
"maxAge": {
"max": {
"field": "age"
}
},
"minAge": {
"min": {
"field": "age"
}
}
}
}
}
}
在这里,您需要使用terms aggregation为每个名称创建一个存储桶。 每桶,您需要使用最大和最小聚合获得最大值和最小值。
休息你需要在客户端照顾。