ElasticSearch6.X时间范围查询无效bug

ElasticSearch6.X时间范围查询无效bug

1.es6.8.1版本时间范围查询,原始写法如下:

GET /oms_historyalarm.historyalarm_recent/historyalarm_recent/_search
{
    "query":{
             "range":{
                "fault_start_time":{
                    "from":"2019-10-28 00:00:00",
                    "to":"2019-10-28 17:46:03",
                    "format": "yyyy-MM-dd hh:mm:ss"
                  }
              }
      }
}

查询结果如下:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}
2.查阅了很多度娘的资源都没有找到解决方案,最后再回去排查了es索引的字段类型,发现fault_start_time字段存储类型是String的,这样的话,es就会默认进行分词再查询,当然无果而返。

解决办法:很简单就是把需要过滤的时间字段标识为关键字,则es就不会对其进行分词。如下:

GET /oms_historyalarm.historyalarm_recent/historyalarm_recent/_search
{
    "query":{
             "range":{
                 "fault_start_time.keyword":{
                     "from":"2019-10-28 00:00:00",
                     "to":"2019-10-28 17:46:03",
                     "format": "yyyy-MM-dd hh:mm:ss"
                  }
              }
    }
}

ElasticSearch6.X时间范围查询无效bug_第1张图片

结果:当然成功啦

ElasticSearch6.X时间范围查询无效bug_第2张图片

希望能帮到大家,有问题欢迎留言。

你可能感兴趣的:(编程系列,ElasticSearch,elasticsearch,java)