3.5.1 整体结构
在Lucene中,org.apache.lucene.index.TermInfosReader类的getIndexOffset()方法实现了一个类似的折半查找。对于特别大的顺序集合可以通过采用插值法提高查找速度。
Lucene的整体结构如图3-14所示。
图3-14 Lucene原理图
可以使用SVN客户端从https://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/下载正在开发中的Lucene源代码。
Lucene源码分为核心包和外围功能包:核心包实现搜索功能;外围功能包实现高亮显示等辅助功能。Lucene源码的核心包中共包括7个子包,每个子包完成特定的功能。
最基本的是索引管理包 (org.apache.lucene.index) 和检索管理包(org.apache.lucene.search)。索引管理包实现索引的建立、删除等。检索管理包根据查询条件,检索得到结果。
索引管理包调用数据存储管理包(org.apache.lucene.store),主要包括一些底层的I/O操作。同时也会调用一些公用的算法类 (org.apache.lucene.util)。编码管理包(org.apache.lucene.codecs)用于方便自定义索引的编码和结构。文档结构包(org.apache.lucene.document)用于描述索引存储时的文档结构管理,类似于关系型数据库的表结构。
查询分析器包(org.apache.lucene.queryParser)实现查询语法,支持关键词间的运算,如与、或、非等。语言分析器(org.apache.lucene.analysis)主要用于对放入索引的文档和查询词切词,支持中文主要是扩展此类。
下面先介绍索引是如何生成的,然后介绍查询原理。