相关接口使用可以看TestBKD.java。

仔细读BKDReader,BKD树是一颗完全二叉树,每个节点在一个维度上进行划分.

发现里面为了节约空间做了很多差量编码工作.其中的PackedIndexTree结构是这样的:

要知道这个结构是为了遍历树的,因此有pushLeft,pushRight,pop等操作,这里splitValuesStack可以看到冗余存了numDims维数据,但实际上就是为了在索引中只存splitValues差量的,因为可能很多数据都是不用改的,只是后面的suffix部分需要改,第一个差量字节还存在code那个int中也是为了省空间(参见PackedIndexTree的readNodeData方法).

在访问docvalues(比如精确的geo值时还要保存common prefix,以做到压缩读取.压缩读取的编码也是比较特别:

会有一个维度、一个字节的数据,在一个runlength里是共用的 (会不会某些情况有浪费啊),还提供了estimatePointCount接口,按叶子节点的最大数量来估计节点数量.

内存索引实现的时候因为要支持新增文档,为了避免子树旋转等重操作,这里会维护一个N,2N,4N,8N,...的森林,磁盘索引不需要森林.

bkd树的主要好处是:索引能小很多,但docvalues这里是有一些冗余存储,虽然有压缩.

小数据量的时候不如geo hash,感觉上应该是受制于大量的压缩,还有包括docvalues都需要重新读取的原因。

Lucene 6.6.0 BKD树相关推荐

  1. Lucene 7.5.0 Bkd Tree

    Bkd-Tree作为一种基于K-D-B-tree的索引结构,用来对多维度的点数据(multi-dimensional point data)集进行索引.Bkd-Tree跟K-D-B-tree的理论部分 ...

  2. lucene配置动态域_Lucene BKD树-动态磁盘优化BSP树

    当我对遇到的问题找一个解决方案的时候,我遇到了BKD树这个难题.从来没有听过吗?这种情况可能不只是你自己.从google上搜索"bkd tree",通常会把你引导到 origina ...

  3. lucene使用3.0.3_Jirasearch 2.0狗粮:使用Lucene查找我们的Jira问题

    lucene使用3.0.3 几年前,我首先构建并发布了Jirasearch ,它是用于薄型包装Lucene服务器的有趣的狗粮测试用例,以针对我们的Jira问题公开强大的搜索UI. 这很好地展示了Luc ...

  4. b-k-d树 原理 图文解析

    背景 前文介绍了 k-d树 和 k-d-b树 今天再来这个b-k-d树已经几乎没啥可以参考的资料了 只能硬啃两篇文章了 一个是:medium 一个是发明者的论文 挺好的,人还是要耐着性子读一些难啃的东 ...

  5. lucene使用3.0.3_Apache Lucene 5.0.0即将发布!

    lucene使用3.0.3 终于,在一系列强大的4.x功能(最近是4.10.2)发布之后,我们终于在努力开发另一个主要的Apache Lucene版本! 没有确切时间的承诺(完成时就完成了!),但是我 ...

  6. lucene使用3.0.3_使用Apache Lucene 4.3轻松进行搜索

    lucene使用3.0.3 Lucene是用Java编写的全文搜索引擎,可以为任何应用程序提供强大的搜索功能. Lucene的核心是基于文件的全文本索引. Lucene提供API创建该索引,然后向该索 ...

  7. 让盘古分词支持最新的Lucene.Net 3.0.3

    原文:让盘古分词支持最新的Lucene.Net 3.0.3 好多年没升级过的Lucene.Net最近居然升级了,到了3.0.3后接口发生了很大变化,原来好多分词库都不能用了,所以上次我把MMSeg给修 ...

  8. Lucene 7.5.0 索引文件之nvdnvm

    nvd&&nvm用来存储域的标准化值(normalization values),这两个索引文件记录了每一篇文档中每一种域的标准化值跟索引信息.在Lucene 7.5.0中,标准化值的 ...

  9. Lucene 2.2.0发布自带的HTMLParser的使用

    Lucene 2.2.0发行包中自带的org.apache.lucene.demo包中,有一个为HTML和TXT文件建立索引.删除索引以及实现检索的实例,其中在org.apache.lucene.de ...

最新文章

  1. 一致性hash算法 - consistent hashing
  2. 【算法】算法测试题4:最长公共连续子串
  3. 30段极简Python代码:这些小技巧你都Get了么
  4. oracle 格式化报表输出,perl的格式化(Format)报表输出实现代码
  5. matplotlib库使用
  6. AppCompat是什么?
  7. pscc2019滤镜抽出_Adobe Photoshop CC 2019滤镜工具提升图片清晰度(PS)教程
  8. Rayman的绝顶之路——Leetcode每日一题打卡6
  9. 【2072】歌手大奖赛
  10. Char Popp加入PSB担任高级副总裁兼全球定性研究主管
  11. 玩客云root成功一键获取root权限
  12. [C语言]Pow函数的实现
  13. linux 查看硬盘信息
  14. 阿里面试官问我:如何设计秒杀系统?我给出接近满分的回答
  15. 开源夏令营《基于HackRF开发GPS信号仿真模拟器》工作总结(五)
  16. COMTRADE格式录波数据分析以及函数实现(一)
  17. 都知道linux中的ls命令,但是你知道sl命令是什么作用吗?
  18. electron 解压zip_如何在Electron Framework中提取.zip文件的内容(解压缩)
  19. 编译安装virtualbox 3.1.2_OSE
  20. Qt5开发学习之模型/视图结构(十)

热门文章

  1. 企业常见系统运维面试题
  2. 群晖(Synology)NAS 后台安装 Docker 后配置 Mariadb / MySQL
  3. 香港没有背景转计算机,香港城市大学商务咨询系统(无IT背景)理学硕士怎么样?好不好...
  4. zynq 维修调试记录 客服支持 工作记录
  5. 【Qt】 Qt 5.15 在线安装
  6. 汽车轮胎压力监测系统(TPMS) ----通用电气公司智能传感器解决方案
  7. 虚拟机卸载不干净解决办法
  8. 计算机一级msoffecs试题,DCS系统试题及答案
  9. Linux系列---NTP配置总结
  10. oracle转trs,ORACLE常规恢复之应用数据文件丢失