ElasticSearch实战-BKD-Tree 多维空间树算法(范围查询算法)
Posted 张志翔ۤ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch实战-BKD-Tree 多维空间树算法(范围查询算法)相关的知识,希望对你有一定的参考价值。
Bkd-Tree作为一种基于K-D-B-tree的索引结构,用来对多维度的点数据(multi-dimensional point data)集进行索引。Bkd-Tree跟K-D-B-tree的理论部分在本篇文章中不详细介绍。
一句话概括整个流程的话就是:根据某一个维度将点数据集划分为两部分,递归式将两部分的点数据子集进行划分,最终生成一个满二叉树。
Lucene 7.5.0版本源码中当一个节点中的点数据个数大于1024才会进行切分,为了能简单示例,例子中假设一个节点中的点数据个数大于2个才会进行切分,并且点数据的维度为2。
点数据集,图示如下:
上图中一共有8个点数据,每个点数据有两个维度。为了描述方便,下面统称为x维度,跟y维度。
处理节点1
- 是否要切分:初始的数据集作为第一个节点,即节点1开始进行切分,该节点中有8个数据,大于节点切分的条件值2,所以需要切分。
- 选出切分维度:x维度的最大值跟最小值的差值为7 ,而y维度的最大值跟最小值的差值为9,所以当前节点的切分维度为y维度。<
以上是关于ElasticSearch实战-BKD-Tree 多维空间树算法(范围查询算法)的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch实战(五十)-让Elasticsearch飞起来!百亿级数据存储与查询优化实战!!!