elasticsearch在做范围查询的时候,如果查询的类型是text,则只有gt生效,lt不生效
Elasticsearch | 作者 ljfphp | 发布于2019年04月30日 | 阅读数:10977
问题就是如上所述,我自己本地测试,如果range的字段是date类型的,那么很顺利就查询出来了。但是运维人员把其中一个字段设置type="text",我在做范围查询的时候,死活不好用。
代码如下:
在对timestamp只做gt的时候,是可以查询到数据的,但是加上lt之后,就查询不到数据了,感觉十分奇怪。希望各位大神慷慨解答下,不胜拜谢
代码如下:
"query"=>[
"range" =>[
"@timestamp" => [
"gt" => '23/Apr/2019:20:28:22 -0700',
"lte" => '23/Apr/2019:21:35:13 -0700',
]
]
],
在对timestamp只做gt的时候,是可以查询到数据的,但是加上lt之后,就查询不到数据了,感觉十分奇怪。希望各位大神慷慨解答下,不胜拜谢
5 个回复
strglee
赞同来自: ljfphp
https://lucene.apache.org/core ... .html
number/date 类型 用的是 NumericRangeQuery,也就是按照数值排序
https://www.elastic.co/guide/e ... .html
ljfphp - 叫我铁柱吧
赞同来自:
ljfphp - 叫我铁柱吧
赞同来自:
数据类型 说明
integer_range 有符号32位整数范围 2-32 ~ 232-1
float_range 单精度32位IEEE 754 浮点数范围
long_range 有符号64位整数范围 2-64 ~ 264-1
double_range 双精度64位IEEE 754 浮点数范围
date_range 自系统历元以来无符号64位整数范围内的毫秒数范围
ip_range 支持 IPv4 或者 IPv6 (or mixed) 地址的IP范围
--------
以上是es的文档翻译出来的,怀疑是range不支持text类型做范围查询,但是不敢肯定。。
hapjin
赞同来自:
NermicRangeQuery用的是block kd tree
对于数字范围查询,从Lucene2.9之前的字符串对齐填充,到lucene6.0 之前的 numeric trie tree,然后再到现在的block kd tree
底层数据结构是不一样的,因此范围查询时应该要注意:mapping中定义的 field 的类型(type)是什么.
angryfun
赞同来自: