Lucene学习总结-索引文件结构

来源:互联网 发布:容错算法 编辑:程序博客网 时间:2024/05/20 17:41

lucene由多个段组成,每个段的文档都不相同。

segments_N:

struct segments_N{format;//api版本号version;//当前段的版本号......segment[];//所有段};struct segment{segName;//段的名字segSize;//段的大小,包含的文档数量delGen;//删除的信息docStoreOffset;//共享段的信息};


.fnm:

struct fnm{fieldCount;//域数量field[];//域的数组};struct field{fieldName;//域的名字bitControl;//控制位};

.fdx,.fdt:并不包含分词后的项的信息

struct fdx{fdt*[];//和文档的数量一样,在ftd中的偏移};struct fdt{docFieldData[];//和文档中的数量一样};struct docFieldData{fieldCount;//域的数目fieldData[];//和fieldCount数量一样};struct fieldData{fieldNum;//域的编号bitControl;//控制位,被索引被存储等等fieldValue;//值,即未被分词的值};


.tvx, .tvd. tvf:有关项的信息

struct tvx{tvd*[];//在tvd中的偏移,和文档数量一样tvf*[];//在tvf中的偏移和文档数量一样};struct tvd{fieldInfo[];//和文档的域数量一样};struct fieldInfo{fieldCount;//文档的域数量fieldNum[];//域的编号数组tvf*[];//域在tvf中的偏移,数量为fieldCount-1,指向tvf中的每一项fieldInfo};struct tvf{docFieldInfo[];//文档的数量};stuct docFieldInfo{fieldInfo[];//域的数量}struct fieldInfo{termCount;//域中项的数量bitControl;//控制位termInfo[];//每个项的情况};struct termInfo{text;//项的文本freq;//频率position[];//位置offset[];//偏移};


反向索引信息:包括词典和倒排表

.tii,.tis:词典信息,tii会全部加载到内存中,每个interval个存储一个

struct tis{termCount;//词的数目interval;//跳跃表信息,记录每隔多少个单词跳跃termInfo[];//termCount个};struct termInfo{prefixLength;suffix;//两者共同组成词fieldNum;//所属于域的编号,困惑,有可能属于多个域啊docFreq;//出现的文档频率frq*;//在frq中的偏移prx*;//在prx中的偏移};struct tii{intevalTermCount;//termCount/intervaltis*[];//intevalTermCount个,指向termInfo};struct frq{termPost[];//termCount个};struct termPost{termDoc[];//和项所在文档的数目一样,存储的是文档的差分idskipData[];//跳跃表信息,文档数目除以跳跃的步数,存储的是文档的id。跳跃表分层次的};struct prx{docPost[];//termCount个,也是跳跃表};struct docPost{posts[];//单词所在文档的数目};struct posts{post[];//单词在本文档中出现的各个位置,差分。};


.del:文档删除情况

struct del{format;byteCount;//bits的长度bitCount;//多少位为1bits;//为1的位为删除的文档dGams;//首先得到bits的对应存储,各个位交替存储byte的差分(第几个byte),本byte的值};