Lucene索引过程核心类的简单理解

来源:互联网 发布:空气干燥基挥发分算法 编辑:程序博客网 时间:2024/05/16 17:24

执行最简单的索引过程需要用到下列几个类:

IndexWriter

Directory

Analyzer

Document

Field

下面对这些类进行简要介绍。

1 IndexWriter

索引过程的核心组件。这个类用于创建一个新的索引,并且把文档加到已有的索引中去。可以这样理解IndexWriter:它可以为你提供对索引的写入操作,但不能用于读取或者搜索索引。

2 Directory

Directory类描述了Lucene索引存放的位置。它是一个抽象类,具体的子类提供特定的存储索引方法。FSDirectory和RAMDirectory类分别将索引存储与硬盘和内存当中。

3 Analyzer

文本被索引之前,需要经过分析器的处理。应用程序在IndexWriter的构造函数中指定程序所需要使用的分析器,它负责从将被索引的文本文件中提取词汇单元(tokens),剔除无用的信息(噪声词)。但是如果将要进行索引的文档不是纯文本文档,则需要将其先转换为文本文档。

分析器是lucene非常重要的一部分,如果要集成lucene进行程序设计,选择analyzer是非常重要的一步。

4 Document

一个文档代表一些field集合。可以把Document当作一个虚拟的文档,比如一个web页面、一个Email消息、一个文本文件,你可以从中取回大量数据。一个文档的域代表文档或者文档相关的一些元数据。

比如,我们可以为每一个检索到的文本文件创建一个Document实例,并往该实例中添加组成他的域Field,最后把这个Document对象添加到索引中去,这样就完成了索引文档的操作。

5 Field

索引中每一个Document对象都包含一个或多个不同命名的域,这些域包含于Field类中。每个域对应于一段数据,这些数据在搜索过程中可能会被查询或在索引中检索。

Lucene提供四种类型的域:

Keyword——不需要被分析,但是会被逐字地被索引并存储。适用于原始值,也就是需要被全部保留的域,比如URL、文件路径、日期、姓名等。

UnIndexed——既不需要被分析,也不需要被索引,但是该值同样被存储在索引文件中。该类型适用于需要和搜索结果一起被显示出来但用户不会将它的值直接用于搜索的情形(比如web页的url,数据库的主键等)。由于这种域的原始值会被存储于索引中,索引过大可能会产生问题,所以不适合存储具有较大文本的域。

UnStored——与UnIndexed相反,需要被分析和索引,但是不会被存储。适用于索引那些不需要以其原是形式进行检索的大数据量文本,比如web页正文。

Text——需要被分析和索引。该类域容易引起混乱,使用时需要谨慎。

每个域由域名name和域值value成对组成。选择哪一种类型的域取决于想要如何使用该域极其值。



下面也简要介绍一下搜索过程的核心类

IndexSearcher

Term

Query

TermQuery

Hits

1 IndexSeacher

IndexSearcher类用于搜索IndexWriter类所创建的索引:这个类是连接索引的重要手段,并提供了一些search方法。可以将它看作为以只读方式打开索引的类。最简单的search方法是将单个Query对象作为函数的一个参数,并返回一个Hits对象。

2 Term

是用于搜索的一个基本单元。同域对象一样,它包括了一对字符串元素:与域中的name和value对应。

3 Query

4 Hits

Hits类是一个存放有序搜索结果指针的简单容器,在这里搜索结果是指匹配一个已知查询的一系列文档。