如何在 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的新手,非常感谢任何代码示例。
您可以获得每个用户的最小值和最大值,然后您需要从客户端执行其余操作 -
{
"aggs": {
"users": {
"terms": {
"field": "Name"
},
"aggs": {
"maxAge": {
"max": {
"field": "age"
}
},
"minAge": {
"min": {
"field": "age"
}
}
}
}
}
}
在这里,您需要使用术语聚合为每个名称创建一个存储桶。对于每个存储桶,您需要使用最大和最小聚合来获取最大值和最小值。
休息您需要在客户端照顾。