NLucene研究系列(2)-Architecture
Architecture
NLucene的Architecture如下图所示:
从图中我们清楚的看到,NLucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中直接操作索引文件的索引核心又是系统的重点。Lucene的将所有源码分为了7个模块,各个模块所属的系统部分也如上图所示。需要说明的是QueryPaser是做为Search的语法解析器存在,不被系统之外实际调用,因此这里没有当作对外接口看待,而是将之独立出来。
从面象对象的观点来考察,NLucene应用了最基本的一条程序设计准则:引入额外的抽象层以降低耦合性。首先,引入对索引文件的操作Store的封装,然后将索引部分的实现建立在(Index)其之上,完成对索引核心的抽象。在索引核心的基础上开始设计对外的接口Search与Analysis。在每一个局部细节上,比如某些常用的数据结构与算法上,NLucene也充分的应用了这一条准则。在高度的面向对象理论的支撑下,使得NLucene的实现容易理解,易于扩展。
NLucene在系统结构上的另一个特点表现为其引入了传统的客户端服务器结构以外的应用结构。NLucene可以作为一个运行库被包含进入应用本身中去,而不是做为一个单独的索引服务器存在。这自然和NLucene开放源代码的特征分不开,但是也体现了NLucene在编写上的本来意图:提供一个全文索引引擎的架构,而不是实现。各模块的功能描述如下:
模块名称 |
功能描述 |
NLucene.Search |
检索管理,根据查询条件,检索得到结果 |
NLucene.Index |
索引管理,包括索引建立、删除等 |
NLucene.Analysis |
语言分析器,主要用于的切词,支持中文主要是扩展此类 |
NLucene.QueryParser |
查询分析器,实现查询关键词间的运算,如与、或、非等 |
NLucene.Document |
索引存储时的文档结构管理,类似于关系型数据库的表结构 |
NLucene.Store |
数据存储管理,主要包括一些底层的I/O操作 |
NLucene.Util |
一些公用的数据结构 |