百度空间 | 百度首页 
 
查看文章
 
lucene索引的建立
2009-10-21 11:36
1.索引文件
.fdt文件:主要保存数据源数据,存储的field的值仅为Document中具有的Store.YES属性的field
.fdx文件:记录当前Document在.fdt文件中的位置,以便后面读取时方便
segments文件:通常,在一个完整的索引中,有且只有一个segments文件,该文件没有后缀,它记录了当前索引中所有的
segment的信息
.fnm文件:包含了Document中的所有field名称
.tis文件:用于存储分词后的词条(Term);
.tii文件:是.tis文件的索引文件,它标明了每个.tis文件中的词条的位置
deletable文件:类似于Windows的回收站原理,所有的文档在被删除后,会首先在deletable文件中留一个记录,要真正删
除时,才将索引除去。
2.文档倒排
作用:统计词条的位置和词频信息
说明:倒排完毕后,所有的词条都被放入到了一个HashTable中,它的key是词条的Term对象,value是Posting类型的对象
lucene首先将这个HashTable转化成一个Posting类型的数组,然后对这个数组进行排序,使所有的词条按字典顺序
排列。那样,就可以将词条信息写入到.tii和.tis文件中。另外,将频率和位置信息写入.frq和.prx文件中去

3.StandardAnalyzer能将标点过滤掉

4.FSDirectory和RAMDirectory
FSDirectory:指的是在文件系统中的一个路径
RAMDirectory:是内存中的一个区域
二者都可以作为索引的存储路径

5.合并索引
用户不但可以将存放于不同文件系统路径下的索引合并,还可以将内存中的索引与文件系统中的索引进行合并,以次来
保存那些存放于RAMDirectory中的索引
注意:合并内存中的索引时,一定要先将其相应的IndexWriter关闭,以保证滞留在缓存中的文档被刷到RAMDirectory中
去,这点与试用FSDirectory时一样。如果不使用close方法关闭IndexWriter,就会发现索引文件并未真正写入目
录中去。
合并索引的目的:是为了减少目录内的索引文件的数量,以使lucene能够更快地处理索引,这将大大加快lucene的检索速
度。

6.索引的优化
目的:对整个索引目录内、未合并的segment进行一个优化的合并,以保证检索时的速度
IndexWriter的optimize()方法能够对当前IndexWriter所指定的索引目录及其所使用的缓存目录下的所有的segment做优化
使所有的segment合并成一个完整的segment,即整个索引目录内只出现一种文件前缀

7.试用文档ID号来删除特定文档
逻辑删除:(相当于windows的回收站)
IndexReader reader=IndexReader(INDEX_STORE_PATH);
reader.deleteDocument(0);
reader.close();

逻辑删除后恢复:
IndexReader reader=IndexReader(INDEX_STORE_PATH);
reader.undeleteAll();
reader.close();


物理删除:
IndexReader reader=IndexReader(INDEX_STORE_PATH);
reader.optimize();
reader.close();

8.lucene索引的同步问题
a. lucene的同步问题只可能发生在对索引进行文档添加、文档删除、合并segment和优化时
b. lucene有自己的锁机制可以防止非法操作的发生
write.lock出现在向索引添加文档时,或是将文档从索引中删除时
commit.lock主要是与segment合并和读取的操作相关
c. 开发者在开发应用的过程中,不能仅仅依赖于lucene的锁机制来防止非法操作的发生,而
是应该养成良好的编写具有同步特性的代码的习惯,才能编写出高质量的代码

9. lucene2.0以上的版本中出现了个新类,indexModifier类,它集成了IndexWriter的大部分功
能和IndexReader中的对索引删除的功能

类别:搜索引擎 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu