首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch:聚合请求时区字段不起作用

Elasticsearch:聚合请求时区字段不起作用
EN

Stack Overflow用户
提问于 2020-09-18 09:54:51
回答 1查看 257关注 0票数 1

Postman创建的查询和QueryBuilder创建的请求是相同的,但TimeZone字段不适用于java请求。

以下是请求目标映射信息

代码语言:javascript
复制
"timeArchived": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
            }

下面是java请求源

代码语言:javascript
复制
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请求相同的查询。

代码语言:javascript
复制
{
   "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选项工作。

代码语言:javascript
复制
{
    "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时间。

代码语言:javascript
复制
{
   "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中设置时区?

EN

回答 1

Stack Overflow用户

发布于 2020-09-18 11:51:49

查询看起来很好,我从我的一端对其进行了测试。可能的原因是在request.source(mailSourceBuilder);行传递的SearchSourceBuilder不正确。我尝试了以下几种方法:

代码:

代码语言:javascript
复制
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);

响应:

代码语言:javascript
复制
{"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},
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63948291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档