2016-04-28 76 views
0

我正在致力于ElasticSearch 2.3.1。我有要求获取最近90天的数据。在这个我需要数据以及明智的聚合。我面临的问题是,我能够获取最近90天的数据,但不能在聚合上应用日期范围Elasticsearch 2.3.1用于筛选和聚合的Java API,日期范围

所以,我有两个问题

问题1 - 这应该对结果集的匹配查询领域的工作是不同的。

问题2 - 为对上述查询

查询其我使用的Java API如下:

GET _search 
{ 
    "aggs": { 
    "t1": { 
     "filter": { 
     "range": { 
      "timestamp": { 
      "from" : "now-1d/d", 
     "to" : null, 
     "format" : "epoch_millis", 
     "include_lower" : true, 
     "include_upper" : true 
      } 
     } 
     }, 
     "aggs": { 
     "t2": { 
      "date_histogram": { 
      "field": "timestamp", 
      "interval": "1m" 
      } 
     } 
     } 
    } 
    } 
} 

总之我需要以下类型

Java API for full: 
match query { 
    aggregation { 
    filter aggregation, 
    date histogram 
    } 
} 
的Java API的

回答

1

对于问题1,以下查询有效:

GET _search { 
"query": { 
    "match": { 
    "body": "Text_To_Search" 
    } 
}, 
"aggs": { 
    "outer_agg": { 
    "filter": { 
    "bool": { 
    "must": [{ 
     "range": { 
     "timestamp": { 
     "from": "now-90d/d", 
     "to": null, 
     "format": "epoch_millis", 
     "include_lower": true, 
     "include_upper": true 
     } 
     } 
    }] 
    } 
    }, 
    "aggs": { 
    "inner_agg": { 
    "date_histogram": { 
     "field": "timestamp", 
     "interval": "1m" 
    } 
    } 
    } 
    } 
} 
} 
为同一

Java的API是:

DateHistogramBuilder dhb = AggregationBuilders.dateHistogram("t2").field("timestamp").interval(DateHistogramInterval.MINUTE); 

BoolQueryBuilder bqb = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("timestamp").gte("now-90d").to("now").format("epoch_millis")); 

FilterAggregationBuilder fab = AggregationBuilders.filter("t1").filter(bqb).subAggregation(dhb); 

SearchResponse sr = TEFESConnector.getInstance().getClient().prepareSearch("index_name").setTypes("type_name").setQuery(QueryBuilders.matchQuery("field_to_search", "text_to_search")).addAggregation(fab).execute().actionGet();