Lucene索引文件解析之“项”


接上文Lucene索引文件解析之

 

关于项(Term)

 

.tis文件里记录的是经过分析器(analyser)分析之后的字典。还是来看文件内容:

 

.tis 写道

FF FF FF FE  00 00 00 00 00 00 00 07 00 00 00 80 ?..........€
00 00 00 10 00 05 63 6F 64 65 72 00 01 00 00 00 ......coder.....
06 65 78 70 65 72 74 00 01 01 01 00 03 69 27 6D .expert......i'm
00 01 01 01 00 06 6C 75 63 65 6E 65 00 02 01 01 ......lucene....
00 03 6E 65 77 00 01 02 02 00 05 61 6C 6C 65 6E ..new......allen
01 01 01 01 00 05 72 6F 63 6B 79 01 01 01 01       ......rocky....

 

1.  FF FF FF FE tis文件的版本;

2.  00 00 00 00 00 00 00 07 字典中记录的项的个数;

3.  00 00 00 80 IndexInterval ,这个参数是配合tii文件一起,加快查询之用,之后会详细介绍

4.  00 00 00 10 SkipInterval 用于加速TermDocs.skipTo(int)的,之后会详细介绍


5.  剩下的部分就是一个个项的信息:

1.  00 前缀长度,特指当前和它之前的公用的前缀部分的长度;举个例子,有两个相邻的项分别是“bone”“boy”,那么“boy”“bone”公用的前缀是“bo”,则前缀长度就是2;若没有公用的,或者项是第一个,那么前缀长度也就是0;这样做的目的是为了节省存储空间;

2.  05 的文本长度;

3.  63 6F 64 65 72 的文本内容"coder";

4.  00 所属的序号;

5.  01 在文档中出现的次数;

6.  00 .frq文件中位置的偏移量,这个字节定位项所在文档的关键

7.  00 .prx文件中位置的偏移量;

8.  00 SkipData.frq文件中位置

9.  此后依此类推。

.tis文件的格式为<文件版本><项数量>< IndexInterval><SkipInterval>[<公用前缀长度><项文本长度><项文本内容><项所属域序号><文档中出现次数><frq中的偏移量><prx中的偏移量><SkipData在frq的位置>...]

 

.tii文件中记录了tis文件的索引,简而言之,在查询时是通过预载tii来加快对的检索。 

 

.tii 写道

 

FF FF FF FE 00 00 00 00  00 00 00 01 00 00 00 80   ?..........€

00 00 00 10 00 00 FF FF  FF FF 0F 00 00 00 14      ...........

 

 

tii和tis的非常类似,只是在项信息之后多了一个IndexDelta,也就上面的14,它表示在tis文件中第一个项信息的偏移量是20(十六进制的14的十进制是20)个字节。

 

上面FF FF  FF FF 0F 是很让人迷惑的,因为tii中第一个索引项是空的,相当于new Term("",""),它没有一个域与其匹配,Lucene默认用-1来填充,具体细节请参见TermInfosWriter类的源代码。

 

到现在可能对tis和tii的作用还是很模糊,解密的关键在于对IndexInterval的理解,下次我们将围绕它来展开讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值