Lucene学习笔记(2)--lucene的核心类介绍

      知彼知己百战不殆,为了有效地使用Lucene,你需要深入的理解它是如何工作的,以及如何在需要的时候扩展它。下面,我们将首先熟悉一下Lucene为索引和搜索所公开的核心类。

1、索引过程的核心类

  •  IndexWriter
  •  Directory
  •  Analyzer
  •  Document
  •  Field

下图展示了这些类在建立索引的过程中是如何协作的。

  1.1 IndexWriter

       IndexWriter(写索引)是索引过程的核心组件,这个类负责创建新索引或者打开已有索引,以及向索引中添加、删除或更新被索引文档的信息。可以把它看做这样一个对象:它为你提供针对索引文件的写入操作,但不能用于读取或搜索索引。

  1.2 Directory

       Directory类描述了Lucene索引的存放位置。它的子类负责具体指定索引的存储路径。

  1.3 Analyzer

       文本文件在被索引前,需要经过Analyzer(分析器)处理。Analyzer是由IndexWriter的构造方法来指定的,它负责从被索引文本文件中提取词汇单元,并剔除剩下的无用信息。Analyzer是一个抽象类,Lucene提供了几个类实现它。这些类有的用于跳过停用词(英文中如:a、an、the、in等,中文中如:的,把,呢,啊等);有的用于把词汇单元转换成小写形式,以使搜索过程能忽略大小写差别;对于要将Lucene集成到应用程序的开发人员来说,选择什么样的Analyzer是程序设计中的非常关键一步。

  1.4 Document

       Document(文档)对象代表一些域(field)的集合。你可以将Document对象理解为虚拟文档如Web页面、邮件信息、文本文件,然后你可以从中取回大量数据。

  1.5 Field

       索引中的每个文档都包含一个或多个不同命名的域,这些域包含在Field类中。每个域都有一个域名和对应的域值,以及一组选项来精确控制Lucene索引操作的各个域值。文档中可能拥有不止一个同名的域。在这种情况下,域的值就按照索引操作顺序添加进去。在搜索时,所有的域的文本连接在一起,作为一个文本域来处理。

 2、搜索过程的核心类

  •  IndexSearcher
  •  Term
  •  Query
  •  TermQuery
  •  TopDocs

  2.1 IndexSearcher

       IndexSearcher类用于搜索由IndexWriter类创建的索引,这个类公开了几个搜索方法,它是连接索引的中心环节。可以将IndexSearcher类看做一个以只读方式打开索引的类。它需要利用Directory实例来掌控前期创建的索引,然后才能提供大量的搜索方法。

  2.2 Term

       Term对象是搜索功能的基本单元。与Field对象类似,Term对象包含一对字符串元素:域名和单词(或域文本值)。在搜索过程中可以创建Term对象,并和TermQuery对象一起使用:

  Query q = new TermQuery(new Term("contents","lucene"));

  TopDocs hits = searcher.search(q, 10);

   以上代码命令Lucene寻找contents域中包含单词lucene的前10个文档,并按照降序的排列这10个文档。

  2.3 Query

       Lucene含有许多具体的Query子类。目前我们使用到的只是Lucene基本的子类:TermQuery类。其他的子类有:BooleanQuery、PhraseQuery、PrefixQuery、PhrasePrefixQuery、TermRangeQuery、NumericRangeQuery、FilteredQuery和SpanQuery。Query是他们共同的抽象父类。

  2.4 TermQuery

        TermQuery是lucene提供的最基本的查询类型,也是最简单的查询类型之一。它用来匹配指定域中包含特定项的文档。

  2.5 TopDocs

        TopDocs类是一个简单的指针容器,指针一般指向前N个排名的搜索结果,搜索结果即匹配查询条件的文档。TopDocs会记录前N个结果中每个结果的int docID和浮点分数。

posted @ 2013-05-07 11:30  愤怒的码农  阅读(298)  评论(0编辑  收藏  举报