如何从ElasticSearch中的一组对象获得平均值,最大值,最小值等

时间:2014-02-05 19:45:21

标签: statistics elasticsearch

我正在使用elasticsearch db来存储基准数据。

我需要计算并检索一组值的平均值,最大值,最小值等。

我有类似的东西:

Index = "myindex"

Type = "mytype"

每个对象有3个字段:

"load_time", "execution_time", "log_time".

然后我运行基准测试,db填充了数百条记录。现在,我将检索每个字段的平均值,最大值和最小值。

我应该运行什么查询? 我尝试了统计方面,但我总是得到一个“无法识别的令牌例外”......

1 个答案:

答案 0 :(得分:3)

您应该使用统计方面(doc

查询应该是:

{
    "query" : {
        "match_all" : {}
    },
    "facets" : {
        "statload_time" : {
            "statistical" : {
                "field" : "load_time"
            }
        },
        "statexec_time" : {
            "statistical" : {
                "field" : "execution_time"
            }
        },
        "statlog_time" : {
            "statistical" : {
                "field" : "log_time"
            }
        }
    }
}

正如文件所说:

  

统计数据包括计数,总数,平方和,平均值   (平均值),最小值,最大值,方差和标准差

在索引几个文档之后,查询的响应是:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [ ]
  },
  "facets" : {
    "statload_time" : {
      "_type" : "statistical",
      "count" : 2,
      "total" : 7.0,
      "min" : 2.0,
      "max" : 5.0,
      "mean" : 3.5,
      "sum_of_squares" : 29.0,
      "variance" : 2.25,
      "std_deviation" : 1.5
    },
    "statexec_time" : {
      "_type" : "statistical",
      "count" : 2,
      "total" : 12.0,
      "min" : 5.0,
      "max" : 7.0,
      "mean" : 6.0,
      "sum_of_squares" : 74.0,
      "variance" : 1.0,
      "std_deviation" : 1.0
    },
    "statlog_time" : {
      "_type" : "statistical",
      "count" : 2,
      "total" : 16.0,
      "min" : 7.0,
      "max" : 9.0,
      "mean" : 8.0,
      "sum_of_squares" : 130.0,
      "variance" : 1.0,
      "std_deviation" : 1.0
    }
  }
}