自己动手写分布式搜索引擎
上QQ阅读APP看书,第一时间看更新

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)主要用于对放入索引的文档和查询词切词,支持中文主要是扩展此类。

下面先介绍索引是如何生成的,然后介绍查询原理。