你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
dreams - 80后,苦逼IT男
赞同来自:
要回复问题请先登录或注册
80后,苦逼IT男
1 个回复
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());