Elasticsearch中的数值类型索引

Elasticsearch中的数值类型索引 | 你来啦 ‍

前言

最近杂七杂八的事情比较多,好久没更新文章了‍♀️,今天就好好来理一理之前没搞清楚的关于ES数值索引的问题。ES主要是用于解决文本检索的场景,ES会默认将所有的输入内容当作字符串来理解,对于字段类型是keyword或者text的数据比较友好。但是如果输入的类型是数字,ES还会把数字当作字符串吗?排序问题还有范围查询问题怎么解决呢?

为什么要用BKD Tree

从Elasticsearch5.x开始,Elasticsearch开始使用Lucene6.0版本,而Lucene6.0版本对于Lucene来说有非常大的改变,随之带来的是Elasticsearch有很大的改变。

ES使用的搜索库Lucene在6.0版本以及以后为了解决多维空间位置搜索问题,改用新的数据结构——BKD树来实现位置搜索,带来了很大的性能提升。开发者发现这种实现也能用于一维数据搜索,于是用新的数据结构代替了现在的字符串的实现

kd树

k-d树(k-dimensional),也就是k维树.

kd树是每个叶子节点都为k维点的二叉树。所有非叶子节点可以视作用一个超平面把空间分割成两个半空间。节点左边的子树代表在超平面左边的点,节点右边的子树代表在超平面右边的点。选择超平面的方法如下:每个节点都与k维中垂直于超平面的那一维有关。因此,如果选择按照x轴划分,所有x值小于指定值的节点都会出现在左子树,所有x值大于指定值的节点都会出现在右子树。这样,超平面可以用该x值来确定,其法线为x轴的单位向量。

kd树允许节点内部有任意的维度的数据。kd树使用二叉树实现,类似于一个BST。关键的不同是,当每个节点比较大小时,可以使用不同的维度来比较。下图是一个2k树的结构与其对应的二维空间,它使用了不同的维度来划分左右区域。

Elasticsearch中的数值类型索引_第1张图片

优缺点:

  • 优点:K-D树和BST一样不仅可以精确查找,也更适合做范围查询,但K-D树比BST更强,它能对多个维度进行范围查询。

  • 缺点:类似于二叉搜索树,如果一个kd树是平衡的,可以保证O(logn) 的时间复杂度,因此每一个节点都把整个集合划分成了两半。关键的问题就是,只有平衡的情况下才能保证这一点。设想一下ÿ

你可能感兴趣的:(elasticsearch,大数据,搜索引擎)