Luence组织结构

1Luence系统的组织结构

Luence最初是Apache软件基金会Jakarta项目组的一个子项目,是一个完全开放源码的全文检索工具包。

Lucene的系统结构具有强烈的面向对象特征。首先是定义了一个与平台无关的索引文件格式,其次通过抽象将系统的核心组成部分设计为抽象类,具体的平台实现部分设计为抽象类的实现,此外与具体平台相关的部分比如文件存储也封装为类,经过层层的面向对象式的处理,最终达成了一个低耦合高效率,容易二次开发的检索引擎系统[8]。

Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中直接操作索引文件的索引核心又是系统的重点。Lucene将所有源码分为了7个模块(Java语言中以包来表示),各个模块所属的系统部分也如上图所示。需要说明的是org.apache.lucene.queryPaser是作为org.apache.lucene.search的语法解析器存在,不被系统之外实际调用,因此这里没有当作对外接口看待,而是将之独立出来。从面向对象的观点来考察,Lucene应用了最基本的一条程序设计准则:引入额外的抽象层以降低耦合性。首先,引入对索引文件的操作org.apache.lucene.store的封装,然后将索引部分的实现建立在 (org.apache.lucene.index)之上,完成对索引核心的抽象。在索引核心的基础上开始设计对外的接口。org.apache.lucene.seareh与。org.apache.lucene.analysis。在每一个局部细节上,比如某些常用的数据结构与算法上,Lucene也充分地应用了这一条准则。在高度的面向对象理论的支撑下,使得Lucene的实现容易理解,易于扩展Lucene在系统结构上的另一个特点表现为其引入了传统的客户端服务器结构以外的应用结构。Lucene可以作为一个运行库被包含进入应用本身中去,而不是作为一个单独的索引服务器存在。

2Lucene索引的数据结构

Lueene索引index由若干段(segment)组成,每一段由若干的文档(doeument)组成,每一个文档由若干的域(field)组成,每一个域由若干的项 (term)组成。项是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置、出现次数等信息。域是一个关联的元组,由一个域名和一个域值组成,域名是一个字串,域值是一个项,比如将“标题”和实际标题的项组成的域。文档是提取了某个文件中的所有信息之后的结果,这些组成了段,或者称为一个子索引。子索引可以组合为索引,也可以合并为一个新的包含了所有合并项内部元素的子索引。

1)段(Segment)

Lucene索引可能由多个子索引组成,这些子索引称为段(Segment)。每一段都是完整独立的索引,能被搜索。索引的方式是:为新加入的文档创建新段;合并已经存在的段。搜索时可能涉及到多个段或者多个索引,每一个索引又可能由一些段组成。

2)文档(Document)

Lucene用一个整形 (Interger)的文档号来指示文档。第一个被加入到索引中的文档就是0号,顺序加入的文档将得到一个由前一个号码递增而来的号码。在删除和插入时文档号是变的,所以在Lucene外部存储这些号码时必须小心。

3)域(Field)

域 (Field)是一个关联的元组,由一个域名和一个域值组成,域名是一个字符串,域值是一个项(term),“标题”和“标题”的项可以组成一个域。标题应该会被用在搜索结果里,因此它会被作为一个字段添加到文档对象里。这些字段可以被索引,也可以不被索引,而原始的数据也可以选择保存在索引里。保存在索引里的字段在创建检索结果页面的时候会很有用。域值也可以被切分(tokenized),这就意味着一个分析程序会将输入到域里的内容分解成搜索引擎能够使用的标记(token)

4)项(Term)

项是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置,出现次数等信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值