0

我正在尝试执行以下查询。我在文档 STATUS 中有 3 个属性 - 可以是“FAIL”、“PASS”、“INVALID” DATE - 包含日期和时间。

我想要每个状态的每日计数

例如:日期:11-09-2016,状态:失败,计数:120
日期:11-09-2016,状态:通过,计数:150

我想要最近一个月、两个月等的数据

 SearchRequest requestQuery =
Requests.searchRequest(ConstantsValue.indexName)
    .types(ConstantsValue._Type)
    .source("{size:999999,"
    + "\"_source\" : "
    + "[\"DTCREATED\", \"STATUS\"]"             
    + ",\"aggs\": "     
    + "{\"group_by_STATUS\": {\"terms\": {\"field\": \"STATUS\"},"
    + "\"aggs\" : "
    + "{\"group_by_DATE\" : {\"date_histogram\" : "
    + "{\"field\" : \"DTCREATED\", \"interval\" : \"day\","
    + "\"format\" : \"yyyy-MM-dd\" },"
    + "\"aggs\" : "
    + "{\"grades_count\" : { \"value_count\" : { \"field\" : \"STATUS\" } }}}}}}}");

此代码为我提供了每个状态的每日计数,但适用于所有记录。并想添加范围过滤器,如下所示。

+"\"query\": {"
+" \"filtered\": {"
+" \"filter\": {"
+ "\"range\": { \"DTCREATED\": { \"gte\": \"now-90d/d\" }}"
+"}}}}}");

但我无法合并这两个查询的内容。我已经尽力了。任何帮助是极大的赞赏。

4

2 回答 2

0

如果我理解正确,您需要使用sub-aggregations

查询看起来像这样:

"aggs" : {
  "days" :{
    "date_histogram" : {
        "field" : "DTCREATED",
        "interval" : "day"
    }
  },
  "aggs" : {
    "statuse_in_day" : {
        "terms" : {
            "field" : "STATUS"
        }
    }
}

首先,您将按天获取存储桶,在每个存储桶中,您将按状态值获取存储桶。

于 2016-11-24T23:10:34.930 回答
0

那么你需要添加查询..你可以像这样组合查询和聚合:

"query": {
    "range": {
       "@timestamp": {
          "from": "now-90d"
       }
    }
},
"aggs" : {"..."}

'd' 代表天数。在此查询中,您询问从“现在 - 90 天”到今天的所有文档,然后添加上一个 asnwer 的聚合,
您可以在此处查找查询弹性搜索范围查询

于 2016-12-04T12:11:34.167 回答