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

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

首页 »编程综合 » lucene更新索引:Lucene.Net 2.3.1开发介绍 3、索引( 2) »正文

lucene更新索引:Lucene.Net 2.3.1开发介绍 3、索引( 2)

来源: 发布时间:星期四, 2009年1月15日 浏览:82次 评论:0
  2、索引中用到核心类

  在Lucene.Net索引开发中用到类不多这些类是索引过程核心类其中Analyzer是索引建立基础Directory是索引建立中或者建立好存储介质Document和Field类是逻辑结构核心IndexWriter是操作核心其他类使用都被隐藏掉了这也是为什么Lucene.Net使用这么方便原因

  2.1 Analyzer

  前面已经对Analyzer进行了很详细讲解Analyzer将会把段文本分析称个个Token这些Token如何被IndexWriter使用这里牵涉到个很重要那就是DocumentsWriter这个类非常关键可以说是索引部分最核心IndexWriter只是它个包装这里主要介绍应用所以就不做太详细介绍Token在DocumentsWriter类中通过DocumentsWriter最重要思路方法——InvertField——推送到了Field中这样就完成了分词添加到逻辑结构过程

  2.2 Directory

  严格来说Directory并不专属于索引它代表是Lucene.Net存储介质它表示了索引具体存放到什么地方在前面两个举例中似乎没有使用到它那是你传入路径会自动转换成DirectoryDirectory有两个子类分别是RAMDirectory——代表索引存放到内存中和FSDirectory——代表索引存放到硬盘在使用FSDirectory存放到硬盘过程中还是会RAMDirectoryIndexWriter会把建立索引先放到RAMDirectory然后到条件才将这些数据写入硬盘

  2.3 IndexWriter

  IndexWriter是索引中负责操作核心它负责把索引文件写入存储介质是控制逻辑存储转换为物理存储纽带

  IndexWriter共有10个可以使用构造但是他们参数类型比较少共有以下几种:

  (1)、Directory d;

  (2)、Analyzer a;

  (3)、bool create;

  (4)、FileInfo path;

  (5)、 path;

  (6)、bool autoCommit;

  (7)、IndexDeletionPolicy deletionPolicy;

  其中67不常用而FileInfo path和 path最终都会构造成Directory这两种路径都是磁盘路径所以构造出来Directory定是FSDrectorybool create表示是否是创建否则是增量更新默认状态是falsebool autoCommit不常用是用来指定是否当索引在close状态下才更新如果是false,则需要在close状态下更新IndexDeletionPolicy deletionPolicy则是指定是否对以前更新进行移除它能表示为两个值KeepOnlyLastCommitDeletionPolicy和SnapshotDeletionPolicy默认状态下是KeepOnlyLastCommitDeletionPolicy

  2.4 Document

  Document就是条虚拟记录可以理解为数据里正是有了它才使我们可以很方便并且易于理解地操作索引文件般记录了需要用到个文档属性当然这需要和Field联合使用

  2.5 Field

  Field类就是数据库里个文档有标题内容作者创建时间这 4个属性那么就需要 4个Field保存这些属性然后把 4个Field加入到Document中就有了行记录在查询时候无论查那个列总能得到整行记录是不是和数据库很相似?

  Field本身具有些属性就和数据库里属性通过它 3个内嵌类设置其实这个地方完全可以用枚举但是很遗憾是Java里面没有枚举所以移植过来也没有转换为枚举

  Field构造也比较多有7个的多其中StoreIndex和TermVector是通过内部类指定

  (1)、Store 有 3个选项Field.Store.COMPRESS表示被压缩存储;Field.Store.YES表示储存;Field.Store.NO表示不被存储

  (2)、Index选项有 4个Field.Index.NO表示不建立索引;Field.Index.TOKENIZED表示分词后索引;Index.NO_NORMS表示值存储内容;Field.Index.UN_TOKENIZED表示不分词索引

  (3)、TermVector这个参数也不常用它有 5个选项Field.TermVector.NO表示不索引Token位置属性;Field.TermVector.WITH_OFFSETS表示额外索引Token结束点;Field.TermVector.WITH_POSITIONS表示额外索引Token当前位置;Field.TermVector.WITH_POSITIONS_OFFSETS表示额外索引Token当前和结束位置;Field.TermVector.YES则表示存储向量

  2.6 索引核心类工作流程

  图 2.6.1

  如图2.6.1表示了数据在Lucene.Net索引过程处理整个流程注意这个流程图中分词器并不直接产生Field对象在例子中Analyzer是被赋予IndexWriter例子等等执行添加文档操作时候IndexWriter才会真正地分词器生成Field需要数据(在DocumentWriter类中)上图只是反映了数据是如何流动并不是真实过程



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: