6.1.1 Lucene应用架构分析
Lucene本身的架构具有良好的面向对象的特征。它定义了平台无关的索引文件,通过抽象将系统的核心组成部分设计为抽象类,具体的平台实现部分设计为抽象类的实现。此外与具体平台相关的部分比如文件存储也封装为类,经过层层的面向对象式的处理,最终实现了一个低耦合、高效率、容易二次开发的检索引擎系统。
由于Lucene良好的设计以及其开源特征,Lucene可以作为一个运行库被包含至应用中去,而不是作为一个单独的索引服务器存在。
图6.1是一个典型的Lucene项目的应用架构,整个应用可以大致分成三个层次。
表现层:负责和前端用户的交互。
接口层:负责对外提供调用接口。
核心层:负责数据封装、建立索引。
图6.1 Lucene应用架构
其中索引是搜索引擎的核心,Lucene最主要的工作是替文件的每一个字作索引,索引让搜寻的效率与传统的逐字搜寻的方式相比有极大提高。Lucene提供一组解读。过滤、分析文件、编排和使用索引的API,它的强大之处除了高效和简单外,最重要的是使用者可以随时根据自己需要定制其功能。
建立索引和索引查询是Lucene搜索引擎的两个基本功能。建立索引的过程就是把源数据处理成非常方便查询的索引文件的过程。Lucene 采用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词/短语表,对于这个表中的每个词/短语,都有一个链表描述了有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候,就能非常快地得到搜索结果。对文档建立好索引后,就可以进行索引查询了。搜索引擎首先会对搜索的关键词进行解析,然后在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。