2016-03-23 12 views
0

ich eine Abfrage auf Elasticsearch von Kibana 4.4.1, die wie folgt aussieht:Java API Elasticsearch mit Elasticsearch Server auf WM Maschine

{ 
    "size": 0, 
    "query": { 
    "filtered": { 
     "query": { 
     "query_string": { 
      "query": "FALK0911622560T", 
      "analyze_wildcard": true 
     } 
     }, 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "range": { 
       "@timestamp": { 
        "gte": 1438290000000, 
        "lte": 1440968400000, 
        "format": "epoch_millis" 
       } 
       } 
      } 
      ], 
      "must_not": [] 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "2": { 
     "date_histogram": { 
     "field": "@timestamp", 
     "interval": "1w", 
     "time_zone": "Europe/Helsinki", 
     "min_doc_count": 1, 
     "extended_bounds": { 
      "min": 1438290000000, 
      "max": 1440968400000 
     } 
     }, 
     "aggs": { 
     "1": { 
      "percentiles": { 
      "field": "Quantity", 
      "percents": [ 
       50 
      ] 
      } 
     } 
     } 
    } 
    } 
} 

Dieses Stück Code wird wieder alle Dokumente mit „Productcode“ = FALK0911622560T .“, zwischen dem gegebenen Intervall

habe ich versucht, das gleiche mit Elasticsearch Java API mit dem folgenden Code:

 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery(matchQueryKey,matchQueryValue)); 

     SearchResponse response = client.prepareSearch(indexName) 
       .setTypes(indexTypeName) 
       .setQuery(boolQueryBuilder) 
       .setSize(100) 
       .addAggregation(AggregationBuilders 
         .dateHistogram("myHistogram") 
         .field("@timestamp") 
         .interval(DateHistogramInterval.WEEK) 
         .timeZone("Europe/Helsinki") 
         .minDocCount(1) 
         .extendedBounds(1438290000000L, 1440968400000L)) 
       .addFields(fieldsOfInterest) 
       .execute() 
       .actionGet(); 

     response.getAggregations(); 

Aber ich habe alle Dokumente in der in dex mit "ProductCode" = FALK0911622560T.

Zwischen der angegebenen Zeit sollte ich nur 5 Dokumente auf response.getAregations() haben, weil ich das Intervall auf Woche eingestellt habe.

Ein doc in Elasticsearch sieht wie folgt aus:

{ 
    "_index": "warehouse-550", 
    "_type": "core2", 
    "_id": "AVOKCqQ68h4KkDGZvk6b", 
    "_score": null, 
    "_source": { 
    "message": "5,550,67.01,FALK0911622560T,2015-07-31;08:00:00.000\r", 
    "@version": "1", 
    "@timestamp": "2015-07-31T06:00:00.000Z", 
    "path": "D:/Programs/Logstash/x_testingLocally/processed-stocklevels-550-25200931072015.csv", 
    "host": "EVO385", 
    "type": "core2", 
    "Quantity": 5, 
    "Warehouse": "550", 
    "Price": 67.01, 
    "ProductCode": "FALK0911622560T", 
    "Timestamp": "2015-07-31;08:00:00.000" 
    }, 
    "fields": { 
    "@timestamp": [ 
     1438322400000 
    ] 
    }, 
    "highlight": { 
    "ProductCode": [ 
     "@[email protected]@/[email protected]" 
    ], 
    "message": [ 
     "5,550,67.01,@[email protected]@/[email protected],2015-07-31;08:00:00.000\r" 
    ] 
    }, 
    "sort": [ 
    1438322400000 
    ] 
} 

Bitte helfen. Danke.

Antwort

0

Sie haben die rangeQuery nicht hinzugefügt. Ändern Sie Ihre boolQueryBuilder zu folgenden:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery(matchQueryKey,matchQueryValue)).must(QueryBuilders.rangeQuery("@timestamp").gte(fromValue).lte(toValue)); 

Sie können Eimer erhalten mit:

InternalDateHistogram histogram = searchResponse.getAggregations().getAsMap().get(aggregation_name); 
List bucketList = histogram?.getBuckets() 
+0

Danke für die schnelle Antwort, es funktioniert –

+0

Sie können upvote/akzeptieren die Antwort dann. – Richa

+0

können Sie mir helfen, die Dokumente in diesem Eimer zu extrahieren? Leider kann ich nicht, weil ich unter 15 Punkten des Renommees habe :( –

Verwandte Themen