首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

深入 Lucene 目录机制

2012-09-25 
深入 Lucene 索引机制深入 Lucene 索引机制?周登朋,上海交通大学研究生,目前在IBM上海国际化实验室(SGL)实

深入 Lucene 索引机制
深入 Lucene 索引机制

?

周登朋,上海交通大学研究生,目前在IBM上海国际化实验室(SGL)实习,对Java技术以及信息检索技术非常感兴趣,你可以通过 zhoudengpeng@yahoo.com.cn来联系他.

?

简介:?

Lucene 是一个基于 Java 的全文检索工具包,你可以利用它来为你的应用程序加入索引和检索功能。Lucene 目前是著名的 Apache Jakarta 家族中的一个开源项目,下面我们即将学习 Lucene 的索引机制以及它的索引文件的结构。

在这篇文章中,我们首先演示如何使用 Lucene 来索引文档,接着讨论如何提高索引的性能。最后我们来分析 Lucene 的索引文件结构。需要记住的是,Lucene 不是一个完整的应用程序,而是一个信息检索包,它方便你为你的应用程序添加索引和搜索功能。

?

<!--<p alt="深入 Lucene 目录机制" title="点击评分 1 星" src="//img.reader8.net/uploadfile/jiaocheng/20140188/2807/2014012823072825159.gif" width="20">深入 Lucene 目录机制深入 Lucene 目录机制深入 Lucene 目录机制深入 Lucene 目录机制 平均分 (共 0 个评分 )<script type="text/javascript"></script><!-- Rating_Area_End -->

?

<!-- dW_Summary_Area_END --><!-- CONTENT_BODY --><!-- MAIN_COLUMN_BEGIN --><!-- Related_Searches_Area_And_Overlays_Begin --><!-- MAIN_COLUMN_CONTAINER_BEGIN -->

正如清单1所示,你可以利用 Lucene 非常方便的为文档创建索引。接下来我们分析一下清单1中的比较关键的代码,我们先从下面的一条语句开始看起。



通过这个例子,我们注意到在调整缓冲区的大小以及写磁盘的频率上面 Lucene 给我们提供了非常大的灵活性。现在我们来看一下代码中的关键语句。如下的代码首先创建了类 IndexWriter 的一个实例,然后对它的三个参数进行赋值。



通过表 1,你可以清楚地看到三个参数对索引时间的影响。在实践中,你会经常的改变合并因子和最小合并文档数的值来提高索引性能。只要你有足够大的内存,你可以为合并因子和最小合并文档数这两个参数赋尽量大的值以提高索引效率,另外我们一般无需更改最大合并文档数这个参数的值,因为系统已经默认将它设置成了最大。



2.域信息文件

我们知道,索引中的文档由一个或者多个域组成,这个文件包含了每个索引块中的域的信息。表 3 显示了这个文件的结构。


表3:域信息文件结构
深入 Lucene 目录机制

3.索引项信息文件

这是索引文件里面最核心的一个文件,它存储了所有的索引项的值以及相关信息,并且以索引项来排序。表 4 显示了这个文件的结构。


表4:索引项信息文件结构
深入 Lucene 目录机制

4.频率文件

这个文件包含了包含索引项的文档的列表,以及索引项在每个文档中出现的频率信息。如果Lucene在索引项信息文件中发现有索引项和搜索词相匹配。那么 Lucene 就会在频率文件中找有哪些文件包含了该索引项。表5显示了这个文件的一个大致的结构,并没有包含这个文件的所有字段。


表5:频率文件的结构
深入 Lucene 目录机制

5.位置文件

这个文件包含了索引项在每个文档中出现的位置信息,你可以利用这些信息来参与对索引结果的排序。表 6 显示了这个文件的结构


表6:位置文件的结构
深入 Lucene 目录机制

到目前为止我们介绍了 Lucene 中的主要的索引文件结构,希望能对你理解 Lucene 的物理的存储结构有所帮助。

周登朋,上海交通大学研究生,目前在IBM上海国际化实验室(SGL)实习,对Java技术以及信息检索技术非常感兴趣,你可以通过 zhoudengpeng@yahoo.com.cn来联系他.

热点排行