在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类中)。上图只是反映了数据是如何流动的,并不是真实的调用过程。
分享到:
相关推荐
Apache Lucene.Net是一个高度可扩展的全文搜索库,它是Apache软件基金会的一部分,是Apache Lucene的.NET版本。这个"Apache-Lucene.Net-3.0.3-RC2.bin"压缩包包含了Lucene.Net 3.0.3 RC2版本的所有核心组件和相关...
Lucene.Net提供了丰富的工具和类来支持这些高级特性,例如`Analyzer`类可以定制分词规则,`Similarity`类则控制着评分算法,这些都直接影响到高亮的效果。 除了高亮功能,Lucene.Net 2.9.1还包含了其他增强搜索体验...
Apache Lucene.Net是一个高度成熟且广泛使用的全文搜索引擎库,它基于Java的Apache Lucene项目,但完全用C#重写,以适应.NET Framework。这个压缩包"Incubating-Apache-Lucene.Net-2.0-004-11Mar07.bin.zip"包含了...
Lucene.NET 提供了一个接口,使得开发者可以自定义分词器,而盘古分词则作为一个插件,通过这个接口与Lucene.NET 结合,提供中文分词服务。这样,当我们创建索引时,盘古分词会负责将输入的中文文本切分成词,然后...
- **官方文档**:Apache Lucene.Net 官方文档详尽地介绍了 API 和使用方法。 - **开源社区**:Stack Overflow 和 GitHub 上有大量讨论和示例代码,是学习和解决问题的好去处。 - **书籍与教程**:如《Lucene in ...
在这个Demo中,重点可能是展示如何集成Lucene.Net 2.4.0.2版本,并使用特定的分词策略来处理文本数据。 【描述】提及"Lucene.Net的版本为2.4.0.2",这意味着该项目基于此特定版本的.NET实现Lucene。Lucene.Net是...
在本节中,我们将重点介绍Lucene.NET 2.3.1版本的核心概念、类库结构以及如何使用它来构建高效的数据检索系统。 #### 二、核心概念 1. **文档(Document)**:每个被索引的信息单元称为文档。在Lucene.NET中,文档由...
分组统计在信息检索中是一种常见的需求,它允许我们按照某些字段(如类别、日期等)对结果进行分类,以便更好地理解数据分布。在Lucene中,可以使用FieldValueHitQueue和FieldDocSortedHitQueue来实现分组。这些类...
1. **资料的准确性**:由于网络上的信息繁多且质量参差不齐,使用Lucene时要确保所参考的教程或文档是最新的,因为版本更新可能导致某些方法或功能的改变。例如,旧版本中可能使用的`Hits`类在新版本中已被废弃,应...
它为Java开发者提供了强大的文本搜索功能,同时也被广泛应用于其他编程语言,如.NET平台的Lucene.Net。Lucene的核心特性包括分词、索引、查询解析、排序以及结果评分。在本文中,我们将深入探讨Lucene组件及其在提高...
5. **Java**:尽管项目主要使用ASP.NET,但Java在此处可能是指Lucene,因为Lucene最初是用Java编写的,尽管后来有.NET版本的Lucene.NET。Java的提及可能是因为开发者可能使用了跨平台的Lucene特性,或者在某些部分...
ASP.NET可以配合Lucene.Net等搜索引擎库实现全文搜索,让用户快速找到他们感兴趣的视频。 总结,ASP.NET视频网站项目涵盖了服务器端编程、数据库操作、用户界面设计、身份验证、性能优化等多个方面,是学习和掌握...
5. **搜索功能**:可能采用了全文搜索引擎(如Lucene.NET)或SQL Server的全文搜索,实现对文件内容的快速检索。 6. **版本控制**:为了管理文件的历史版本,系统可能实现了版本控制功能,允许用户查看和恢复旧版本...
相较于知名的Lucene,Hubble.net在某些方面展现了更为出色的功能,使得它成为开发者们关注的焦点。本文将深入解析Hubble.net的核心特性、安装步骤、使用方法以及常见问题。 一、Hubble.net简介 Hubble.net是一款专...
4. **搜索功能**:通过实现全文搜索或者利用搜索引擎API(如Lucene.NET),可以让用户快速找到感兴趣的主题。 5. **回复与评分**:用户可以对帖子进行回复,表达观点。还可以引入评分系统,鼓励高质量的讨论。 6. ...
开发者可以使用SQL查询或者全文搜索引擎(如Lucene.NET)来实现这一功能。 【性能优化与安全性】 对于高并发的BBS系统,性能优化和安全性至关重要。可以通过缓存技术(如Redis或ASP.NET Output Cache)、负载均衡...
- **Lucene ports: Perl, Python, C++, .NET, Ruby (Lucene的不同版本)**:提及了Lucene被移植到多种编程语言的情况,展示了它的跨平台特性。 - **其他核心章节**: - **Indexing (索引)**:讲解了如何创建和管理...
ASP.NET 可以与 Lucene.NET 或其他搜索引擎库结合,实现全文检索。 9. **安全**:源码中应考虑防止SQL注入、跨站脚本攻击(XSS)和其他安全威胁,使用参数化查询和验证控件是常见的防护手段。 10. **缓存**:为了...
Lucene.NET是.NET平台上的一款全文搜索引擎库,用于实现快速的文本搜索功能。在某些项目中,它被用来实现对产品或内容的快速检索。 7. 电子商务功能 包括购物车、结算、在线支付(如支付宝)、评论和评级等,这些...
11. 搜索功能:博客搜索可能利用了全文搜索技术,如Lucene.NET,对文章内容进行索引和快速查询。 12. 论文部分:项目附带的论文详细阐述了设计思路、技术选型、实现过程以及遇到的问题和解决方案,为学习者提供了...