以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Web挖掘技术 』 (http://bbs.xml.org.cn/list.asp?boardid=69) ---- Lucene的索引文件结构[转] (http://bbs.xml.org.cn/dispbbs.asp?boardid=69&rootid=&id=47637) |
-- 作者:DMman -- 发布时间:5/27/2007 9:00:00 PM -- Lucene的索引文件结构[转] 看了网上的一些关于Lucene的文章,大多数都在讲一些如何使用的问题,也仅仅是局限在如何写一些简单的Demo而已。看过车东的文章(http://www.chedong.com/tech/lucene.html),有一定的深度 我想从Lucene的索引文件的结构来进行分析,以探讨Lucene是如何实现索引和查询的。(建议先看车东的文章,术语相同) Lucene的索引文件存在一个索引目录中。 文件共有10种:*.f(n), *.fdt, *.fdx, *.fnm, *.frq, *.prx, *.tii, *.tis, deletable, seqments. 下面分别描述。 1. segments文件,用来表示索引文件的名字和Document的个数。在SegmentInfos.java描述,参见write())¼br /> 文件头中的第1个4Byte是SegmentName,在Lucene中,SegmentName是一个16进制的数字,是上面的如*.fnm中的*部分,每新增加一个Document,SegmentName会加1(做的是SegmentName++的动作),所以此部分的值会比实际的SegmentName大1。文件头中的第2个4Byte是索引文件的个数,Lucene支持在一个目录中存放多个索引文件(这一部分我也不是十分清楚,不知道哪位大哥可以解惑)。文件体中 是一个可重复的部分,重复的次数由文件头中的第2部分的大小决定。可重复的部分包括2个部分:SegmentName和该索引文件中包含的Document个数。(从这里可以看出,在Lucene中,单个索引文件最多可以包含2的32方个文件(4个byte) 2. *.frm文件,用来保存FieldName,注意,此文件只保存非切分部分的Field,如通过Filed.text()方法进行切分后的Field保存在*.tii, *.tis中。 3. *.fdt文件,用于存放Field的值,每个Document是连续存放的,每个Document内部的格式如下:(参看FieldsWriter.java文件的addDocument()函数) 4. *.fdx文件,用于存放每个Document在fdt文件中的偏移。 5. *.tis文件,用于存放切分过的Field中的值。(参看2,fnm文件)文件格式参看TermInfosWriter.java文件中的add()函数)文件头中的TermNum是一个4byte的Int,代表Term的个文件体是每个Term的重复。每个Term包括7个域。 6. deletable文件,用来存放被删除的文件名。文件格式参看IndexWriter.java中的readDeleteableFiles()函数)文件体中 是一个4byte的整数,代表被删除的文件个数文件体中是一组被删除的文件名。还有*.f(n)是存放Norm的文件,*.tii是与*.tis相对的,*.frq(存放词频的文件),*.prx(存放词频的位置的文件,与*.frq文件联合使用. |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
343.750ms |