zoukankan      html  css  js  c++  java
  • 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和浮点分数。

  • 相关阅读:
    【记录】用了七年eclipse突然改用IntelliJ IDEA------- 痛并快乐着
    【记录】集合Collection和Map整理 (看这一篇就够了)
    group by语句报with sql_mode=only_full_group_by错误
    linux下安装mysql二进制版本(5.6.34)
    linux下安装mysql二进制版本(5.7.11)
    表空间传输-例子2(full transportable)
    表空间传输-例子3(rman-transport获取传输表空间文件)
    transport_datafiles与FLASHBACK_SCN不能一起使用
    表空间传输数据文件转换
    12C添加pdb后创建用户没有相应的表空间
  • 原文地址:https://www.cnblogs.com/angryprogrammer/p/3064315.html
Copyright © 2011-2022 走看看