绊脚石乃是进身之阶。

es+kibana 时间段查询不准确

Elasticsearch | 作者 dreams | 发布于2016年01月25日 | 阅读数:21722

我在doc 定义了一个date 类型的字段,我使用curl查询一个时间段内的数据,网上找了下,time:{"now-6h" TO "now"} 是ok.问题是,date类型的字段查询语法是怎样的,有没有一个详细的说明?求解答,谢谢!
已邀请:

dreams - 80后,苦逼IT男

赞同来自:

问题已经解决.
 elasticsearch(以下简称es)版本:1.7.4,lucene是4.10.4
 es是基于lucene之上,所以存储的方式是由lucene决定的.lucene 的存储类型很少,没有date类型,所以es存储时,会把date类型的值转换成long再存储,查询时,是根据long的比较方式进行查找.
 es对时间格式的处理主要是在DateMathParser和DateFieldMapper,一个影响时间范围查询精确度的重要查询竟然是:
DateTimeZone,kibana关于时间查询如果没有带上DateTimeZone的设置参数,准确性严重打折(如何影响请看MapperQueryParser.getRangeQuerySingle的判断).
 那么 DateTimeZone这个东东怎么设置?根据QueryStringQueryParser.parse的源码,可以发现,可以通过在查询时加上time_zone 字段进行查询,具体看:https://www.elastic.co/guide/e ... ries.
  坑爹,为啥es不设置默认的时间区域呢,kibana在以时间为查询条件时,根本没带这个参数吖!
  解决办法也很简单,在QueryStringQueryParser.parse 设置默认的时间区域,打包更新后,时间段查询一切正常!
 
 
   qpSettings.timeZone(DateTimeZone.getDefault());
 
 
 
 
 
 
 
   

要回复问题请先登录注册