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的存储介质,它表示了索引具体存放到什么地方。在前面的两个示例中似乎没有使用到它,那是因为你传入的路径,会自动转换成Directory。Directory有两个子类,分别是RAMDirectory——代表索引存放到内存中,和FSDirectory——代表索引存放到硬盘。在使用FSDirectory存放到硬盘的过程中,还是会调用RAMDirectory。IndexWriter会把建立的索引先放到RAMDirectory,然后到一定的条件,才将这些数据写入硬盘。
2.3 IndexWriter
IndexWriter是索引中负责操作的核心,它负责把索引文件写入存储介质,是控制逻辑存储转换为物理存储的纽带。
IndexWriter共有10个可以使用的构造函数,但是他们的参数类型比较少。一共有以下几种:
(1)、Directory d;
(2)、Analyzer a;
(3)、bool create;
(4)、FileInfo path;
(5)、string path;
(6)、bool autoCommit;
(7)、IndexDeletionPolicy deletionPolicy;
其中6,7不常用。而FileInfo path和string path最终都会构造成Directory,又因为这两种路径都是磁盘的路径,所以构造出来的Directory一定是FSDrectory。bool create表示是否是创建,否则是增量更新,默认状态是false。bool autoCommit不常用,是用来指定是否当索引在close状态下才更新的,如果是false,则需要在close状态下更新。IndexDeletionPolicy deletionPolicy则是指定是否对以前的更新进行移除,它能表示为两个值,KeepOnlyLastCommitDeletionPolicy和SnapshotDeletionPolicy,默认状态下是,KeepOnlyLastCommitDeletionPolicy。
2.4 Document
Document就是一条虚拟记录,可以理解为数据里的一行。正是有了它,才使我们可以很方便并且易于理解地操作索引文件。它一般记录了需要用到的一个文档的属性,当然,这需要和Field联合使用。
2.5 Field
Field类就是数据库里的一列。一个文档有标题,内容,作者,创建时间这四个属性的话,那么就需要四个Field保存这些属性,然后把四个Field加入到Document中,就有了一行记录。在查询的时候,无论查那个列,总能得到一整行记录,是不是和数据库很相似?
Field本身具有一些属性,就和数据库里的列一样。它的属性通过它的三个内嵌类设置,其实这个地方完全可以用枚举,但是很遗憾的是Java里面没有枚举,所以移植过来也没有转换为枚举。
Field的构造函数也比较多,有7个之多。其中Store,Index和TermVector是通过内部类指定的。
(1)、Store 有三个选项,Field.Store.COMPRESS表示被压缩存储;Field.Store.YES表示储存;Field.Store.NO表示不被存储。
(2)、Index的选项有四个,Field.Index.NO表示不建立索引;Field.Index.TOKENIZED表示分词后索引;Index.NO_NORMS表示值存储内容;Field.Index.UN_TOKENIZED表示不分词索引。
(3)、TermVector这个参数也不常用,它有五个选项。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类中)。上图只是反映了数据是如何流动的,并不是真实的调用过程。

相关推荐
Lucene.Net 2.3.1开发介绍 —— 二、分词(四),这是一个系列的文档,太多了,只好分开
这个文档对lucene进行了介绍并且进行深入的使用,文档分开发了,网络太慢了。。。
lucene.net2.3.1开源项目 lucene是一个开源的全文检索项目,原本是java版的,后来就有了.net版,我上传的这个是.net的2.3.1版本,帮助大家解决全文检索引擎。
lucene.net2.3.1开源项目 lucene是一个开源的全文检索项目,原本是java版的,后来就有了.net版,我上传的这个是.net的2.3.1版本。解决全文检索引擎。此为一部分,二部分打开地址...
1. **索引创建与管理**:Lucene.Net 提供了高效的索引创建工具,可以快速地对大量文本数据进行索引,支持增量索引和实时索引。 2. **查询解析**:它内置了强大的查询语言,能够解析用户输入的自然语言查询,并转化为...
使用 Lucene.NET 2.3.1 开发 在开发过程中,开发者可以按照以下步骤操作: 1. **安装与引用**:首先,需要将 Lucene.NET 2.3.1 库添加到项目中,可以通过 NuGet 包管理器进行安装。 2. **创建索引**:使用 `...
通过分析其源码,我们可以深入了解 Lucene.Net 的工作原理,提升在搜索和索引领域的技能。 1. **Lucene.Net.Search.TestSort.config** 这个文件可能是测试排序的配置文件,用于设置 Lucene.Net 在执行搜索时如何对...
2. **配置分词器**:在Lucene.NET的索引创建阶段,需要配置Analyzer类,指定使用特定的分词器。例如,使用IK Analyzer可以创建`IKAnalyzer analyzer = new IKAnalyzer();`。 3. **字段分析**:在创建Document对象时...
在这个实例中,我们将深入探讨如何使用Lucene.NET 2.9.2来实现索引的生成、修改、查询和删除。 **一、索引生成** 首先,我们需要创建一个索引,这是全文检索的基础。在Lucene.NET中,我们通常会定义一个文档类,...
标题提到的"Lucene.Net的DLL"是指基于.NET平台的全文搜索引擎库——Lucene.Net。这个库是Apache Lucene项目的一个移植版本,专为.NET Framework和.NET Core开发者设计,提供了强大的文本检索和搜索功能。Lucene.Net...
4. **高效存储**:Lucene.Net使用倒排索引技术,极大地提高了搜索速度。同时,它还支持压缩,以减少磁盘空间占用。 5. **内存优化**:Lucene.Net在内存管理和缓存策略上进行了优化,能在大规模数据集上保持良好的...
首先,我们要理解Lucene.Net.dll的核心组件之一——索引。在Lucene.Net中,索引是数据存储和检索的基础。它通过分词、建立倒排索引等过程,将原始文本转化为可快速查询的数据结构。分词器(Analyzer)负责将文本分解...
**二、Lucene.net源码分析** 源码分析是学习Lucene.net的重要环节。通过阅读源码,你可以了解其内部工作原理,包括分词器(Tokenizer)如何将文本分割成词元,索引器(IndexWriter)如何构建索引,以及搜索器...
基于Lucene.net的四个版本(更新至2018.1.26 ) ------------------------------- Lucene.Net.2.9.2.2-支持.net2.0和4.0; Lucene.Net.2.9.4.1 仅支持.net4.0; Lucene.Net.3.0.3 z支持3.5和4.0; Lucene.Net.4.8.0-...
《基于Lucene.Net开发的个人知识库》 在信息技术领域,高效的信息检索和管理是至关重要的。Lucene.Net,作为Apache Lucene项目的一个.NET版本,为开发者提供了强大的全文搜索引擎库,使得开发者能够轻松构建自己的...
《深入剖析Lucene.NET 2.9.1:源码解析与应用开发》 Lucene.NET 2.9.1是开源搜索引擎库Lucene的.NET版本,它为.NET开发者提供了强大的全文检索和索引功能。这个版本的源码提供了一个宝贵的资源,帮助我们理解其内部...
2. 索引(Index):索引是Lucene.Net的核心,它将文档内容转化为倒排索引结构,便于快速查找包含特定词汇的文档。索引过程包括字段划分、分析、建立词典和倒排表等步骤。 3. 文档(Document):文档是索引的基本...
在VS2012环境下开发Lucene.Net + 盘古分词的搜索引擎,首先需要安装Lucene.Net的NuGet包,并确保与项目的.NET版本兼容。然后,导入盘古分词库,可以通过下载源码编译或寻找预编译的DLL文件。在项目中,你需要创建...
Lucene.net 是 Lucene 框架针对 .NET 平台的移植版本,是一个高度可扩展的全文检索引擎开发工具包。它并不直接提供一个完整的全文检索服务,而是为开发者提供了一套构建高效、灵活的搜索引擎的基础架构。通过 Lucene...