Lucene过程理解

Lucene学习文档

索引

何谓索引

1.从理论的角度理解:索引时一个单独的、物理的数据结构,它是某个表中一列或若干列值的集合、和相应的 指向表中物理标识这些值的 数据页的 逻辑指针清单。

2.从通俗的角度理解: 如果以上暂时不能理解,那你可以认为这也是一个单一的数据库,为了提高检索速度或其他原因,新建的一个简单的数据存储空间。

建立索引的优点

         1.大大加快数据的检索速度;

         2.创建唯一性索引,保证数据库表中每一行数据的唯一性;

         3.加速表和表之间的连接;

         4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和      排序的时间。

索引的缺点

         1.索引需要占物理空间。

         2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

 

Lucene简介

         Luceneapache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Eclipse的帮助系统的搜索功能,就是基于Lucene。它的原作者名为Doug Cutting

Lucene优劣

         1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。

  (2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。

  3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。

  4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。

  5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。

Lucene缺点

            如同所有的索引一样,占用磁盘空间,对数据量少、数据变化快的数据源建立索引,需动态维护、降低了速度,加大了资源占用. 

 

 

全文搜索

数据库

索引

对文建立关键字索引

无法使用索引进行like查询

匹配效果

进行单词匹配,例如:“ant”不会匹配“planting

ant”会匹配“planting

匹配度

有匹配度算法,匹配度从高到低。

没有

可定制性

容易定制索引规则

无法定制

 

理解核心索引类

Indexer 类中可见,你需要以下类来执行这个简单的索引过程:

IndexWriter

Directory

Analyzer

Document

Field

1,  IndexWriter 建立索引的中心组件。这个类可以创建一个新的索引或者打开已有的索引。就是可以进行写入操作,但是不能进行读取操作或搜索。

2,  Directory 代表一个Lucene索引位置。它是一个抽象类,子类有:FSDirectory(磁盘索引位置),RAMDirectory(内存索引,在关闭时销毁)。

3,  Analyzer  IndexWriter构造函数中指定。对文本进行关键词提取,并取到其他内容。所以,不是文本的内容必须先转换成文本。有输入过滤的作用。

4,  Document  一个Document 代表字段的集合。Lucene只用来处理文本,Lucene的核心只能用来处理java.lang.Stringjava.io.Reader。在我们的Indexer 中,我们处理文本文件,所以对我们找出的每个文本文件,创建一个Document类的实例,用Field(字段)组装它,并把这个Document 添加到索引中,完成对这个文件的索引。

5,  Field  在索引中每个Document含有一个或多个Field类。每个字段相应于数据的一个片段,将在查询的时候重新获取。

 

理解核心搜索类

Lucene 提供的基本搜索接口和索引的一样直接。只需要几个类来执行基本的搜索操作:

IndexSearcher

Term

Query

TermQuery

Hits

1,  IndexSearcher  用来进行搜索,而IndexWriter是用来建立索引。 

 

索引文件夹/tmp/index,数据片段对应的字段“contents”,查找“lucene”字段。

2, Term  搜索的基本单元,和Field相对应。

3,  Query  是最基本的抽象父类。

4,  TermQuery  TermQuery Lucene支持的最基本的查询类型,并且它也是最原始的查询类型之一。

5,  Hits  Hits 类是一个搜索结果文档队列指针的容器。

 

其它类似的搜索产品

EgothorNamazu。。。

 

理解创建索引过程

 

1,  转化成文本。由于Field总是接收String类型或Reader类型,所以都要转化成文本。

2分析一旦你准备好了要索引的数据并创建了由 Field 组成的Lucene Document,你就可以调用IndexWriteraddDocument(Document)方法,把你的数据送入Lucene 索引。当你做这些时,Lucene 首先分析这些数据以使它更适合索引。它将文本数据分割成块或单词,并执行一些可选择的操作。例如,单词可以在索引之前转化为小写,以保证搜索是大小写无关的。典型的,它也有可能排除转入中所有经常出现但无意义的词,例如英语终止词(a, an, the, in, on 等等)。类似的,通常分析输入单词以获取它的本质。

这个非常重要的步骤称为分析。Lucene 的输入能够以很多有趣且有用的方法进行分析,目前,把这个步骤想像为一个过滤器。

3写索引。在分析完成后,就可以添加到索引中间去了。Lucene是将输入存储到反向索引的数据结构中去。

你可能感兴趣的:(搜索引擎)