在系列文章索引文件的生成(Lucene 7.5.0)中,我们介绍了存储维度(见文章Bkd-Tree)值大于等于2的数值类型对应的索引文件的生成过程。对于维度值等于1的情况,其生成过程有少许的不同。为了后续便于介绍该类型的索引文件的合并,我们需要再写一篇文章来介绍其生成过程。

索引文件的变更

图1:

  从Lucene 8.6.0开始,用于存储点数据(point value)的索引文件由原先的索引文件dim&&dii,改为三个索引文件kdd&kdi&kdm,其变更的目的可以看这个issue,本文中不展开讨论。

  给出图1的目的是为了说明,点数据对应的索引文件,其生成的总体流程没有太大变动的,下文中介绍维度值为1的生成过程(基于Lucene 8.7.0)时,只会介绍与维度值大于等于2的不同的流程点,其相同的流程点可以参考系列文章索引文件的生成(基于Lucene 7.5.0)。

差异

  维度值为1的生成索引文件的过程中,唯一不同点在于图1中的流程点构建BKD树的节点值(node value),如下所示:

图2:

点击查看大图

  图2中,红框标注的流程点表示在这些流程点的处理方式是一致的。

生成索引文件kdd&kdi&kdm的流程图

图3:

节点

图4:

  流程点节点中包含了在索引(Indexing)期间收集的点数据信息,收集相关的介绍见文章索引文件的生成(八)。

节点内的点数据排序

图5:

  无论维度的数量是多少,最终生成的bkd树的每个叶子节点中的点数据是有序的。对于维度大于等于2的情况,叶子节点中点数据的排序规则取决这个叶子节点的父节点在进行左右子树划分时选择的某个维度,对应图2中流程点内部节点的排序,该流程点的详细介绍见文章索引文件的生成(十)。对于维度等于1的情况,由于不用考虑选择哪个维度进行排序,所以对于某个点数据域来说,直接对flush/commit收集到的全量点数据进行排序即可,随后对这个有序的集合按块划分(下文会介绍)后,每一块中的点数据集合将被写入到一个叶子节点,如下所示。另外排序使用的算法为最大有效位的基数排序(MSB radix sort)。

图6:

点击查看大图

  当然了,排序过程中并不会真正的去改变排序前的点数据集合,通过一个int类型的ord[ ]实现一个映射关系来描述排序关系。同样关于ord[ ]数组的介绍可以看文章 索引文件的生成(十)之dim&&dii。

统计leafCardinality以及其他一些信息

图7:

  在获得了有序的点数据集合后,接着有序的依次取出每一个点数据,每处理一个点数据,需要统计leafCardinality以及其他一些信息。

leafCardinality

  对于一个有序的集合,可以划分为一个或多个区间,要求每个区间内至少包含一个数据,如果包含多个数据,那么要求所有的数据是相同的,leafCardinality描述的正是区间数量。

图8:

  随后在图2的流程点写入不同后缀信息到索引文件.kdd中中,会根据根据leafCardinality的值来选择(用于来判断是否使用游标编码(Run Length Encoding)存储)存储开销较低的数据结构来存储点数据的后缀信息。同样的,详细的过程见文章索引文件的生成(十三)的介绍。

剩余内容看这里:https://www.amazingkoala.com.cn/Lucene/Index/2020/1217/185.html

Lucene 索引文件的生成(二十五)之kddkdikdm相关推荐

  1. Lucene 索引文件的读取(十五)之fdxfdtfdm

    本文承接文章索引文件的读取(十四)之fdx&&fdt&&fdm,继续介绍剩余的内容.为了更好的理解下文中的内容,建议先阅读文章DirectMonotonicWriter ...

  2. Lucene 索引文件的合并(四)之kddkdikdm

    本篇文章开始介绍索引文件kdd&kdi&kdm的合并,由于维度值为1和维度值大于等于2的点数据对应的索引文件的合并方式有较大的差异,故我们分开介绍.本篇文章先对维度值为1的情况展开介绍 ...

  3. Lucene 索引文件的生成(二十三)之fdxfdtfdm

    从本篇文章开始介绍用于描述存储域(存储域的概念见文章索引文件之fdx&&fdt&&fdm)的索引文件.fdx..fdt..fdm的生成过程,直接给出流程图: 图1:   ...

  4. Lucene 索引文件的读取(十四)之fdxfdtfdm

    在前几篇索引文件的读取的系列文章中,我们介绍索引文件tim&&tip的读取时机点时说到,在生成StandardDirectoryReader对象期间,会生成SegmentReader对 ...

  5. Lucene 索引文件的合并(三)之fdxfdtfdm

    本文承接文章索引文件的合并(二)之fdx&&fdt&&fdm,继续介绍剩余的内容,下面先给出索引文件fdx&&fdt&&fdm的合并流程 ...

  6. VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池

    VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池 终端服务池是指由一台或多台微软终端服务器提供服务的桌面源组成的池.终端服务器桌面源可交付多个桌面.它具有以下特征: 1.终端 ...

  7. 未处理异常和C++异常——Windows核心编程学习手札之二十五

    未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...

  8. linux exec 二程序,二十五、Linux 进程与信号---exec函数

    25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...

  9. osgEarth的Rex引擎原理分析(二十五)地形瓦片大小尺寸和LOD的关系

    目标:(十八)中的问题55 osgEarth::TerrainOption中_tileSize默认大小为17,LOD的默认范围为0-23,这两个值的关系是什么? 还有瓦片的像素尺寸_tilePixel ...

最新文章

  1. 2021年春季学期-信号与系统-第八次作业参考答案-第一小题
  2. 大数运算(1)——大数储存
  3. oracle删表分区同时维护索引,有关Oracle表分区进行(DML)维护后对索引的影响的分析...
  4. 并发编程—Volatile关键字
  5. mysql 性能拐点_性能压测及分析调优实践
  6. 保存MATLAB工作区的矩阵为TXT文件
  7. 七个习惯之四:双赢思维
  8. FastReport动态改变字体颜色
  9. zabbix 快速入门
  10. PLSQL的JOB启动与停止(可视化操作)
  11. Installing the Sulley fuzzer framework on Windows XP Professiona
  12. unzip 解压大文件出现错误invalid zip file with overlapped components (possible zip bomb)(linux分卷解压大文件错误解决)
  13. C/C++ restrict修饰符
  14. webpack之工欲善其事,必先利其器
  15. 数电课程设计,数字电子钟具有时、分、秒以及校时功能
  16. SQL递归查询上级部门树
  17. left join on详解
  18. oracle imp lrm 00101,LRM-00101: unknown parameter name解决办法
  19. MAKER配置文件详解
  20. 怎么用视频编辑软件去掉视频中的水印

热门文章

  1. 也说拍拍贷无担保模式
  2. 百度编辑器(ueditor)魔改:1、增加自定义按钮
  3. 冷战时期的网课系统,居然催生出了世上第一块触屏!|科技拾遗
  4. OSChina 正月十五乱弹 ——接到她老公的质问电话
  5. 目前主流浏览器及其内核
  6. 打开网页出现“您的连接不是私密连接”怎么办?
  7. 亚马逊买家号同时批量注册多账号怎么操作?
  8. Mybatis使用xml方式配置
  9. springboot大学生拼车管理系统 毕业设计-附源码201507
  10. android fstab文件,[Android6.0][RK3399] fstab 文件格式说明和解析代码跟踪