专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » lucene更新索引:Lucene索引构建逻辑模块分析 »正文

lucene更新索引:Lucene索引构建逻辑模块分析

来源: 发布时间:星期四, 2009年1月15日 浏览:19次 评论:0
  、       绪论

  这个部分我们将分析Lucene中索引构建逻辑模块它和前面介绍存储抽象起构成了Lucene索引核心部分无论是对外接口中查询还是分析各种文本以进步生成索引都需要直接这部分来获得对索引文件访问能力因此这部分在系统中至关重要构建个高效、易使用索引构建逻辑即是Lucene在这部分需要达到

  从面向对象经典研究方式出发来看我们只需要使用继承体系来表达图3.1中各个概念就可以通过这个继承体系来控制索引文件结构然后设计合适永久化思路方法以及接受分析token流操作即可将索引构建逻辑完成原理上就是这样简单由于两个关键概念document和field都已经在org.apache.lucene.document中当作基础类定义过了因此实际上Lucene在这部分需要完善概念结构还有segment和term在此基础上继续编写各个逻辑结构永久化思路方法然后提供个进入接口思路方法即是宣告完成了这个过程其中永久化部分Lucene使用了另外实现个代理类方式来实现即对于某个类X存在XWriter类和XReader类来负责写出和读入功能;用作永久化功能类是被永久化友元

  在接下来分析过程中我们按照这样个思路以UML图和对象体系描述来叙述这部分设计和实现然后通过内部数据流理清楚时序

   2、       对象体系和UML图

  1. 项(Term)

  这部分主要是分析针对项(Term)这个概念所做设计包括概念所实际涉及类、永久化类首先我们从图3.2和阅读参考文献3知道项(Term)所表示它拥有域、频数和位置信息等等属性因此Lucene中设计了两个类来表示这个概念如下图



  对于图4.14中所描述内容结合Lucene源代码中些文件看能够加深理解准备阶段可以参考demo文件夹中org.apache.lucene.demo.IndexFiles类和java文件夹中org.apache.lucene.document文件包索引构建阶段主要源码位于java文件夹中org.apache.lucene.index.IndexWriter类因此这部分可以结合这个类实现来看至于内存文件系统比较复杂但是这时逻辑相对简单因此也不难理解

  上面数据流图十分清楚勾画除了整个索引构建逻辑这部分设计:通过层层嵌套类结构在构建时候即分步骤有计划生成了索引结构将的存储到内存中文件系统中然后通过对内存中文件系统优化合并输出到实际文件系统中

   4、       有关cLucene项目

  前面 3个部分已经完成了分析索引构建逻辑任务这里我们还是有针对性谈谈我们这次毕业设计项目cLucene在这部分情况

  在实现这部分时候为了将些java语法中比较特殊部分比如内隐类、同步、同步对象等等我们不得不采用了些比较晦涩和艰深C语法在OpenTop这个类库所提供类似于java语言设施上来实现这个尤其体现在实现Segment相关类时为了处理原来java源代码中用内隐类实现Lock文件创建机制时候我们不得不定义了大量cLucene::store::With子类并为的传入指针设置它为友元才得以精确模拟了原有语义陷于我们这次重写以移植为主系统结构基本上没有大变化不得不产生这种重复而且大量工作如果需要改进这中状况我们应该考虑按照C语言特点来设计索引构建部分类库继承结构但是很可惜在本文成文的前时间不允许我们这样做



  来自java语法特殊性只是我们解决问题个方面我们还需要处理引用方式由于java语言拥有了垃圾收集机制因此得以将参数形式看作为引用而不考虑其分配和消亡问题C语言并不具备这种机制它需要员自行管理分配空间和销毁对象问题在这里我们使用是来自OpenTop中所引入计数指针RefPtr<>模板它能够模拟指针语义并且计算指针被引用次数在引用次数为0时就自动释放资源:这是种类似于java语言中引用方式不过它显得更加高效率我们在cLucene实现中大量使用了计数指针模板

  除此的外我们没有改变Lucene所定义索引构建逻辑结构和语义我们实现个完全和java版本Lucene兼容版本



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: