2016-04-28 1 views
0

Je travaille sur ElasticSearch 2.3.1. J'ai besoin d'aller chercher des données pour les 90 derniers jours. En cela, j'ai besoin de données ainsi que l'agrégation minute sage. Le problème que je suis confronté est que je suis en mesure d'obtenir des données pour les 90 derniers jours mais pas en mesure d'appliquer la plage de dates sur l'agrégation.Elasticsearch 2.3.1 API Java pour le filtrage et l'agrégation avec la plage de dates

J'ai donc deux problèmes

Problème 1 - Cela devrait fonctionner sur un ensemble de résultats d'un champ de requête de correspondance est différent.

Problème 2 - API Java pour la requête ci-dessus

de requête que je me sers est comme suit:

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" 
      } 
     } 
     } 
    } 
    } 
} 

En bref, je besoin de Java API de type suivante

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

Répondre

1

Pour le problème 1, la requête suivante fonctionne:

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" 
    } 
    } 
    } 
    } 
} 
} 

L'API Java pour le même est:

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();