API Javaasticsearch с сервером Elasticsearch на компьютере WM
Я делаю запрос на Elasticsearch из Kibana 4.4.1, который выглядит следующим образом:
{
"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
]
}
}
}
}
}
}
Этот фрагмент кода вернет все документы с "ProductCode" = FALK0911622560T"между заданным интервалом.
Я попытался сделать то же самое с Elasticsearch Java API со следующим кодом:
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();
Но я получаю все документы в индексе с "ProductCode" = FALK0911622560T.
Между указанным временем у меня должно быть только 5 документов на response.getAgregations(), потому что я установил интервал в неделю.
Документ в Elasticsearch выглядит так:
{
"_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": [
"@kibana-highlighted-field@FALK0911622560T@/kibana-highlighted-field@"
],
"message": [
"5,550,67.01,@kibana-highlighted-field@FALK0911622560T@/kibana-highlighted-field@,2015-07-31;08:00:00.000\r"
]
},
"sort": [
1438322400000
]
}
Пожалуйста помоги. Спасибо.
1 ответ
Решение
Вы не добавили rangeQuery
, Измени свой boolQueryBuilder
к следующему:
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery(matchQueryKey,matchQueryValue)).must(QueryBuilders.rangeQuery("@timestamp").gte(fromValue).lte(toValue));
Вы можете получить ведра, используя:
InternalDateHistogram histogram = searchResponse.getAggregations().getAsMap().get(aggregation_name);
List bucketList = histogram?.getBuckets()