Elasticsearch干货(三):对于数值类型索引优化

本文深入探讨Elasticsearch数值类型存储和查询优化,特别是5.x版本后的变化。介绍了Lucene6.0引入的Block k-d tree(BKD tree)如何处理数值类型的range查询,以及其在Elasticsearch中的性能影响。通过对比和分析,提出对于数值类型数据,考虑存储方式和查询需求以避免缓慢查询,如使用keyword类型或选择合适版本。
摘要由CSDN通过智能技术生成

我们在使用Elasticsearch不免会遇到像int、double这种数值类型,Elasticsearch本身也是支持这些类型的,但并不意味着数字就一定要用数值类型,恰恰相反,用keyword有时候性能会更好,包括对数值进行range。博主生产上就出现过对数值类型range非常慢的情况。本文将详细介绍Elasticsearch中关于数值类型的使用和数值类型查询原理与keyword的区别。
#Elasticsearch中数据类型
本来想自己总结一下的,无意中发现了一篇文章,总结的很详细,瞬间打消了我的念头。直接搬来:https://blog.csdn.net/chengyuqiang/article/details/79048800

好,回来我们已经大概了解了Elasticsearch中有哪些数据类型,本文我们主要探讨其中的数值类型。
#Elasticsearch是如何存储数值类型的?

在了解Elasticsearch如何存储数据数值类型之前,需要了解Lucene是如何存储索引数据的。参考:Elasticsearch原理(二):索引存储方式

#版本的区别
Elasticsearch中对于数值类型的存储在5.X版本之后有一个重要的变化。从Elasticsearch5.x开始,Elasticsearch开始使用Lucene6.0版本,而Lucene6.0版本对于Lucene来说有非常大的改变,随之带来的是Elasticsearch有很大的改变。(但这并不是Elasticsearch从2.x跳到5.x的原因,之所以跳版本是为了ELK的版本统一。)

在Lucene6.0之前对于数据的索引只支持字符串,虽然表面上是支持其他类型,但最终都是转成了字符串进行倒排索引的。

这种方式最大的好处就是直接通过term进行查询,速度非常快。但也有弊端,对于数值类型的range查询就非常的笨重。比如说range[1,50],它实际上是转换成了bool中的or,就像(1 or 2 or 3 or 4 … or 50)。如果range一个很大的范围的话,效率可想而知。于是Lucene做了一定优化,把range[1,10]、range[11&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值