当前位置: 首页 > news >正文

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 一样快。**

http://www.dtcms.com/a/276007.html

相关文章:

  • 以太坊重放攻击
  • 特辑:Ubuntu,前世今生
  • 关于学习docker中遇到的问题
  • AI领域的黄埔军校:OpenAI是新一代的PayPal Mafia,门生故吏遍天下
  • 可以用一台伺服电机控制多台丝杆升降机联动使用吗
  • 类和对象—多态
  • C语言:20250712笔记
  • SpringBoot集合Swagger2构建可视化API文档
  • P2619 [国家集训队] Tree I
  • 【Datawhale AI夏令营】Task2 笔记:MCP Server开发的重难点
  • 【LeetCode 热题 100】98. 验证二叉搜索树——(解法一)前序遍历
  • Python 三大高频标准库实战指南——json · datetime · random 深度解析
  • 【Java入门到精通】(二)Java基础语法(上)
  • 27. 移除元素
  • 【android bluetooth 协议分析 07】【SDP详解 1】【SDP 介绍】
  • 19th Day| 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数, 236.二叉树的最近公共祖先
  • springboot3X 整合高版本mybatisplus
  • pyqt5绘制矩形和线条
  • 【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
  • C语言<数据结构-单链表>(收尾)
  • Windows 开启和关闭 Administrator 用户的方法
  • 软考高级系系统分师和架构师常考知识点总结三
  • Typecho博客系统与WebSocket实时通信整合指南
  • 网络安全初级--搭建
  • GPU编程入门:CUDA与OpenCL全面解析
  • 聊下easyexcel导出
  • 岛屿数量问题
  • [爬虫实战] 多进程/多线程/协程-异步爬取豆瓣Top250
  • 小架构step系列12:单元测试
  • 【LeetCode】算法详解#8 ---螺旋矩阵