lucene基础学习

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

搜索引擎Lucene

第一章Lucene简介

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

第二章lucene索引的建立

的五个基础类

索引的建立,Lucene 提供了五个基础类,分别是Document, Field, IndexWriter, Analyzer, Directory。以下是他们的用途:

Document

Document的含义为文档,在Lucene中,它代表一种逻辑文件。Lucene本身无法对物理文件建立索引,而只能识别并处理Document的类型文件。Lucene从Document取出相关的数据源并根据属性配置进行相应的处理。

Field

对象是用来描述一个文档的某个属性的

lucene中的field也具有一些特定的类型如

在中,Field内部包含两个静态的内部类分别是Store和Index详细的描述了Field的属性,它们分别表示Field的储存方式和索引方式。

Store类有3个公有的静态属性:

:表示该Field不需要储存。

:表示该Field需要储存。

:表示使用压缩方式来保存这个Field的值。

Index有4个公有的静态属性:

:表示该Field不需要索引,也就是用户不需要去查找该Field的值。

:表示该Field先被分词再被索引。

TOKENIZED:表示不对该Field进行分词,但是要对他进行索引,也就是该Field会被用户查找。

:表示对该Field进行索引,但是不使用Analyzer,同时禁止它参加评分,主要是为了减少内存的消耗。

Analyzer

在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对不同的语言和应用需要选择适合的Analyzer。Analyzer 把分词后的内容交给IndexWriter 来建立索引。

IndexWriter

IndexWriter 是Lucene 用来创建索引的一个核心的类,他的作用是把一个个的Document 对象加到索引中来。

Directory

这个类代表了Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是RAMDirectory,它表示一个存储在内存当中的索引的位置。

建立索引过程

的初始化

在Lucene中,IndexWrite的主要作用是对索引进行创建,加入Document,合并各种索引段,以及控制与索引相关的各方面,它是Lucene的索引主要操作者。

3个公有的构造函数:

要获得一个IndexWrite的实例,就需要从它的构造函数入手尝试。具体的构造函数如下:public IndexWrite(String path, Analyzer a, Boolean create)

public IndexWrite(File path , Analyzer a, Boolean create)

public IndexWrite(Directory d, Analyzer a, Boolean create)

第一个参数为索引存放路径,第二个参数Analyzer为分词器,第三个参数是一个Boolean 类型的值,这个参数的含义是:在由第一个参数所指定的路径处,删除原目录内的所有内容重新构建索引:或是追加新的Document。

像索引添加文档

IndexWrite准备好以后,就可以想索引目录中添加Document。IndexWrite提供了很简单的接口以供开发人员进行Document的添加:

public void addDocument(Document doc)

public void addDocument(Document doc,Analyzer analyzer)

注意:在使用addDocument方法加入所有的Document后,一定要使用IndexWrite的close方法来关闭索引器,使所有在I/O缓存中的数据都写入到磁盘上,关闭各种流。这样才能最终完成索引的建立。如果没有关闭,就会发现索引目录中内除了一个segment 文件外一无所有。很多初学者在刚开始使用Lucene时经常忘记关闭IndexWrite,这样会导致索引的数据滞留在缓存中,未写入磁盘,有可能连目录的锁也没有去除。在下次对同一个目录加入索引文件的时候可能会提示目录处于锁定状态而造成无法加入文件。

限制每个Field中词条的数量

有必要为Lucene限制每个Field内可以建立索引的词条数。

public void setMaxFieldLength(int maxFieldLength)

索引过程的优化

合并因子mergeFactor

说明:无论是磁盘上创建新segment还是将segment合并,都需要进行磁盘的I/O操作,相对于内存的操作来说,这种磁盘I/O操作是比较费时的。因此,当mergeFactor取比较小的值时,内存中驻留的文档数量较少,向磁盘写入segment的操作较多,故此时将占用较小的内存,但是索引的建立由于I/O操作频繁所以会比较慢。而当mergeFactor 取较大值时,内存中驻留的Document数量较多,向磁盘写入segemnt的操作较少,故此时将占用较多的内存,但索引的建立速度会比较快。

maxMergeDocs

一个较大的MaxMergeDocs适用于应对大批量的文档索引建立,而增量式的索引则使用较小的MaxMergeDocs。

minMergeDocs

当索引将被存到磁盘中时,需要首先保存在内存中,minMergeDocs就是用来限制这个内存中的文档数量的。

索引的合并和优化

FSDirectory 与RAMDirectory

对于lucene来说这两种目录都可以作为索引的存储路径,FSDirectory指的是在文件系统中的一个路径。当lucene向其中写入索引时,会直接将索引写到磁盘上,RAMDirectory

相关文档
最新文档