呼延十

还记得年少时的梦吗

Lucene系列(20)索引格式之kdd文件

本文使用 Lucene 代码版本:8.7.0 前言 本文学习kdi文件格式. 他又是经典三个文件中的存储数据的文件. .kdd 文件整体结构 字段解释: LeafNodeData:一个叶子节点的所有数据 DocIds: 这个叶子节点上的点对应的所有DocIds PackedValue: 这个叶子节点上的所有点的实际值 Count: doc...

Lucene系列(19)索引格式之kdi文件

本文使用 Lucene 代码版本:8.7.0 前言 本文学习kdi文件格式. 他又是经典三个文件中的存储索引的文件. .kdi 文件整体结构 字段解释: PackedValue: 其实我更愿意叫他Index. 他是整个完全二叉树的内部节点集合. 采用先序遍历的方式,存储在一个字节数组(每个字节数组是一个Node)的数组中. TreeNode: 树的内部节点.实现不一定完...

Lucene系列(18)索引格式之kdm文件

本文使用 Lucene 代码版本:8.7.0 前言 本文学习kdm文件格式. kdm,kdi,kdd 三个文件共同存储了Lucene中Point类型的数据及索引,Point存储及搜索过程中使用BKD树数据结构,因此这三个文件和BKD关系比较密切, 建议在阅读前了解相关的BKD树理论. BKD树简单理论介绍 Lucene中对于BKD树的实现源码 .kdm 文件整体结构 字段解...

Lucene系列(17)工具类之bkd树的源码实现

前言 源码分析文章比较难以组织,推荐大家直接看大量注释的源码: 传送门 上一篇文章讲了bkd树的基本原理,这次看一下Lucene对BKD树的实现. bkd树在lucene中的实现,都在org.apache.lucene.util.bkd中,其中又包含了下面几个类. 接口 为了看懂这块代码,让我们先来介绍下三个接口. org.apache.lucene.util.bkd.Poi...

Lucene系列(16)工具类之kdb Bkd树原理概述

前言 lucene在6.0之后引入了数字点(Point)的概念,对于多维数字点的索引,就需要用到kd树结构了,当然,在lucene中用到的是进阶版本的bkd树. 为了让自己不是一脸懵逼的去看lucene代码,这篇文章先大概学习一下kd树相关的基础理论知识. kd树 k-d树,全称是k-dimensional树,也就是k维树. k-d树是每个叶子节点都为k维点的二叉树。所有非叶...

Lucene系列(15)工具类之基数选择算法

前言 Lucene 中对于选择算法,有两个实现,快速选择和基数选择. 上一篇文章讲了IntroSelector,这篇文章讲RadixSelector. 基数排序介绍 基数选择和基数排序非常类似,本文侧重点在于 Lucene 的实现,因此对于基数排序的详细原理就不解释了。 大概介绍下: 基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割...

Lucene系列(14)工具类之快速选择算法

前言 什么是选择算法? 在计算机科学中,选择算法是一种在列表或数组中找到第 k 个最小数字的算法; 计算集合中第 k 大(小)的元素。就是 topK 相关系列的问题,但是选择算法只需要找到第 k 个就好。 在 lucene 的源码中,对于选择算法定义了一个接口: /** An implementation of a selection algorithm, ie. comp...

Lucene系列(13)索引格式之nvd文件

本文使用 Lucene 代码版本:8.7.0 前言 本文学习一下。nvd 文件的格式与内容。 nvm 与 nvd 文件配合存储了索引中的标准化相关信息。其中 nvd 存储了真实的数据,比如当前 field 有值的所有 docId,以及他们的标准化值。 .nvd 文件整体结构 字段解释: Field: 一个 field 的所有标准化信息 DocIDWIth...