在ElasticSearch中对一组数据执行复杂计算

时间:2015-04-27 14:56:14

标签: elasticsearch kibana-4

如何在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的新手,非常感谢任何代码示例。

1 个答案:

答案 0 :(得分:0)

您可以从每个用户获得最小值和最大值,然后从客户端获得您需要执行的其余操作 -

{
  "aggs": {
    "users": {
      "terms": {
        "field": "Name"
      },
      "aggs": {
        "maxAge": {
          "max": {
            "field": "age"
          }
        },
        "minAge": {
          "min": {
            "field": "age"
          }
        }
      }
    }
  }
}

在这里,您需要使用terms aggregation为每个名称创建一个存储桶。 每桶,您需要使用最大和最小聚合获得最大值和最小值。

休息你需要在客户端照顾。