BKD 树(Block KD-Tree)Lucene

BKD 树(Block KD-Tree)是 Lucene 用来存储和快速查询 **多维数值型数据** 的一种磁盘友好型数据结构,可以把它想成:

> **“把 KD-Tree 分块压缩后落到磁盘上,既能做磁盘顺序读,又能像内存 KD-Tree 一样做范围/最近邻搜索。”**

核心要点(5 句话):

1. **存储内容**  
   只存 **数值/日期/geo 点** 的多维坐标(int、long、float、double、geo_point …),**不存文本倒排**。

2. **结构**  
   • 依旧按 KD-Tree 方式递归切分维度;  
   • 每满 1024 个点就写成一个 **block**(顺序磁盘页),天然压缩 & 缓存友好。  
   • 所有叶子块再建一个 **内存索引**(min-max 值 + 文件指针),查询时先扫内存索引→定位少量磁盘块→顺序读,几乎无随机 IO。

3. **支持的查询**  
   • 范围查询:price ≥ 50 AND price < 100  
   • 距离查询:geo_distance 5 km 内  
   • 最近邻:knn_vector search  
   复杂度 **O(log N)**,且由于顺序 IO,实际比 KD-Tree 在磁盘上快很多。

4. **优点**  
   • 磁盘顺序读友好 → SSD/HDD 都高效  
   • 压缩率极高 → 同样数据体积 < 1/4 原始数组  
   • 支持 **实时增删改**(新文档追加新 block,后台合并)

5. **在 Elasticsearch 中的位置**  
   • 所有 `long`, `integer`, `double`, `date`, `ip`, `geo_point`, `geo_shape`, `dense_vector` 字段,**默认**就用 BKD 树存维度数据;  
   • 因此 `range`, `geo_distance`, `knn` 查询都走 BKD 而非倒排索引。

一句话:  
**BKD 树就是 Lucene 的“多维数值索引硬盘版”,让范围/距离/最近邻查询在磁盘上也像内存 KD-Tree 一样快。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值