摘要:
6、关闭IndexWriter对象 代码: writer.close(); --> IndexWriter.closeInternal(boolean) --> (1) 将索引信息由内存写入磁盘: flush(waitForMerges, true, true); --> (2) 进行段合并: mergeScheduler.merge(this); 对段的合并将在后面的章节进行讨论,此处仅仅讨论将索引信息由写入磁盘的过程。 代码: IndexWriter.flush(boolean triggerMerge, boolean flushDocStores, boole... 阅读全文
posted @ 2010-02-02 02:02
刘超觉先
阅读(6456)
评论(5)
推荐(3)
摘要:
5、DocumentsWriter对CharBlockPool,ByteBlockPool,IntBlockPool的缓存管理 在索引的过程中,DocumentsWriter将词信息(term)存储在CharBlockPool中,将文档号(doc ID),词频(freq)和位置(prox)信息存储在ByteBlockPool中。 在ByteBlockPool中,缓存是分块(slice)分配的,块(slice)是分层次的,层次越高,此层的块越大,每一层的块大小事相同的。 nextLevelArray表示的是当前层的下一层是第几层,可见第9层的下一层还是第9层,也就是说最高有9层。 le... 阅读全文
posted @ 2010-02-02 02:01
刘超觉先
阅读(6649)
评论(1)
推荐(2)
摘要:
3、将文档加入IndexWriter 代码: writer.addDocument(doc); -->IndexWriter.addDocument(Document doc, Analyzer analyzer) -->doFlush = docWriter.addDocument(doc, analyzer); --> DocumentsWriter.updateDocument(Document, Analyzer, Term) 注:--> 代表一级函数调用 IndexWriter继而调用DocumentsWriter.addDocument,其又调用Docume 阅读全文
posted @ 2010-02-02 01:59
刘超觉先
阅读(11070)
评论(1)
推荐(2)
摘要:
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后的文章中进行分析。 Lucene的索引过程,很多的博客,文章都有介绍,推荐大家上网搜一篇文章:《Annotated Lucene》,好像中文名称叫《Lucene源码剖析》是很不错的。 想要真正了解Lucene索引文件过程,最好的办法是跟进代码调试,对着文章看代码,这样不但能够最详细准确的掌握索引过程(描述都是有偏差的,而代码是不会骗你的),而且还能够学习Lucene的一些优秀的实现,能够在以后的工 阅读全文
posted @ 2010-02-02 01:58
刘超觉先
阅读(21072)
评论(3)
推荐(2)
摘要:
四、具体格式 4.2. 反向信息 反向信息是索引文件的核心,也即反向索引。 反向索引包括两部分,左面是词典(Term Dictionary),右面是倒排表(Posting List)。 在Lucene中,这两部分是分文件存储的,词典是存储在tii,tis中的,倒排表又包括两部分,一部分是文档号及词频,保存在frq中,一部分是词的位置信息,保存在prx中。 Term Dictionary (tii, tis) –> Frequencies (.frq) –> Positions (.prx) 4.2.1. 词典(tis)及词典索引(tii)信息 在词典中,所有的词是按照字典顺序... 阅读全文
posted @ 2010-02-02 01:43
刘超觉先
阅读(15631)
评论(2)
推荐(3)

浙公网安备 33010602011771号