Postman创建的查询和QueryBuilder创建的请求是相同的,但TimeZone字段不适用于java请求。
以下是请求目标映射信息
"timeArchived": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
}下面是java请求源
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder query = QueryBuilders.boolQuery();
sourceBuilder.trackTotalHits(true);
sourceBuilder.size(0);
sourceBuilder.query(query);
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("timeArchived").timeZone("Asia/Seoul").gte(sTime).lte(eTime);
query.filter(rangeQuery);
query.must(QueryBuilders.termQuery("domain", domain));
sourceBuilder.aggregation(AggregationBuilders.dateHistogram("mailDate").field("timeArchived").fixedInterval(DateHistogramInterval.hours(1)).timeZone(ZoneId.of("ROK")));
SearchRequest request = new SearchRequest();
request.source(sourceBuilder);
SearchResponse response = null;
try {
response = client.search(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}下面是创建的请求查询。java builder请求和postman请求相同的查询。
{
"size":0,
"query":{
"bool":{
"must":[
{
"term":{
"domain":{
"value":"test.com",
"boost":1.0
}
}
}
],
"filter":[
{
"range":{
"timeArchived":{
"from":"2020-09-18 04:00:00",
"to":"2020-09-18 10:09:46",
"include_lower":true,
"include_upper":true,
"time_zone":"Asia/Seoul",
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
},
"track_total_hits":2147483647,
"aggregations":{
"mailDate":{
"date_histogram":{
"field":"timeArchived",
"time_zone":"ROK",
"fixed_interval":"1h",
"offset":21600000,
"order":{
"_key":"asc"
},
"keyed":false,
"min_doc_count":0
}
}
}
}但请求响应不同。java请求timeZone选项不起作用。
此邮递员请求结果timeZone选项工作。
{
"took": 484,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 177,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"mailDate": {
"buckets": [
{
"key_as_string": "2020-09-18 04:00:00",
"key": 1600369200000,
"doc_count": 8
},
{
"key_as_string": "2020-09-18 05:00:00",
"key": 1600372800000,
"doc_count": 16
},
{
"key_as_string": "2020-09-18 06:00:00",
"key": 1600376400000,
"doc_count": 4
},
{
"key_as_string": "2020-09-18 07:00:00",
"key": 1600380000000,
"doc_count": 10
},
{
"key_as_string": "2020-09-18 08:00:00",
"key": 1600383600000,
"doc_count": 17
},
{
"key_as_string": "2020-09-18 09:00:00",
"key": 1600387200000,
"doc_count": 98
},
{
"key_as_string": "2020-09-18 10:00:00",
"key": 1600390800000,
"doc_count": 24
}
]
}
}
}但java请求timeZone选项不起作用。响应为UTC时间。
{
"took":918,
"timed_out":false,
"_shards":{
"total":3,
"successful":3,
"skipped":0,
"failed":0
},
"hits":{
"total":{
"value":223,
"relation":"eq"
},
"max_score":null,
"hits":[
]
},
"aggregations":{
"date_histogram#mailDate":{
"buckets":[
{
"key_as_string":"2020-09-17T19:00:00.000Z",
"key":1600369200000,
"doc_count":8
},
{
"key_as_string":"2020-09-17T20:00:00.000Z",
"key":1600372800000,
"doc_count":16
},
{
"key_as_string":"2020-09-17T21:00:00.000Z",
"key":1600376400000,
"doc_count":4
},
{
"key_as_string":"2020-09-17T22:00:00.000Z",
"key":1600380000000,
"doc_count":10
},
{
"key_as_string":"2020-09-17T23:00:00.000Z",
"key":1600383600000,
"doc_count":17
},
{
"key_as_string":"2020-09-18T00:00:00.000Z",
"key":1600387200000,
"doc_count":98
},
{
"key_as_string":"2020-09-18T01:00:00.000Z",
"key":1600390800000,
"doc_count":70
}
]
}
}
}如何在java中设置时区?
发布于 2020-09-18 11:51:49
查询看起来很好,我从我的一端对其进行了测试。可能的原因是在request.source(mailSourceBuilder);行传递的SearchSourceBuilder不正确。我尝试了以下几种方法:
代码:
SearchRequest searchRequest = new SearchRequest("my_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.aggregation(AggregationBuilders.dateHistogram("histogramtest").field("createdOn")
.fixedInterval(DateHistogramInterval.hours(1)).timeZone(ZoneId.of("ROK")));
searchRequest.source(searchSourceBuilder);响应:
{"buckets":[{"key_as_string":"2020-05-04T16:00:00.000+09:00","key":1588575600000,"doc_count":3},{"key_as_string":"2020-05-04T17:00:00.000+09:00","key":1588579200000,"doc_count":0},{"key_as_string":"2020-05-04T18:00:00.000+09:00","key":1588582800000,"doc_count":0},{"key_as_string":"2020-05-04T19:00:00.000+09:00","key":1588586400000,"doc_count":3},{"key_as_string":"2020-05-04T20:00:00.000+09:00","key":1588590000000,"doc_count":0},{"key_as_string":"2020-05-04T21:00:00.000+09:00","key":1588593600000,"doc_count":3},https://stackoverflow.com/questions/63948291
复制相似问题