Lucene字典文件结构的详细介绍

Lucene字典文件结构的详细介绍

Lucene中的字典文件既没有使用商业数据库的b tree结构,也不是经过hash而得。而由.tii与.tis两个文件组成了一种二层文件结构。

在.tis文件中每隔一个分组跨度便产生一个分组点,在.tis文件中term编号(从0起)能够整除indexinterval时,便将当前term的前驱term作为分组点(第一个分组点为““)保存在.tii文件中。交替填写.tii与.tis文件,直到二层文件结构建立完毕。

有人会问.tii文件为什么不使用hash方法保存哪?回答是:查询时需要找到query term的临近term,hash方法不能胜任(hash算法不能找出范围)。

.tii文件中保存了指向.tis文件中的指针,检索时.tii文件要被预取入内存中,再折半查询找出相邻近并小于或等于query term的分组点term,从.tii文件中分组点term的指针指向的.tis文件位置开始,次序查询.tis文件中的term直到找到quey term或者找出字典排序大于query term的term为止(表明没有包含query term)。

Lucene默认分组跨度为128个term,在root 层文件即.tii文件没有达到128个term时查询类似B tree(超过128后没有分裂产生父节点,所以Lucene字典文件不是b tree结构),也就是说.tis文件可以快速查询128×128个term。当然这不是最终的瓶颈,宏观上说只要.tii文件能满足OS的page框架结构就可以,但是这未免太乐观了。

Lucene没有使用特殊的字典文件结构(或者说是商业系统常用结构),这与Lucene采用segment index索引策略有关(动态索引,更新要快),这些大家可以通过看我后面的文章可以了解到。明天贴图阐释清楚,请您等待。也欢迎您来讨论。