本文讲解Lucene中,创建索引、搜索等常用到的类API

搜索操作比索引操作重要的多,因为索引文件只被创建一次,却要被搜索多次。

索引过程的核心类:

执行简单的索引过程需要如下几个类:IndexWriter, Directory, Analyzer, Document, Field

一、IndexWriter类

IndexWriter(写索引)是索引过程的核心组件。

负责创建新索引或者打开已有索引,以及向索引中添加、删除或更新被索引文档的信息。

它为你提供对索引文件的写入操作,但不能用于读取或搜索索引。IndexWriter需要开辟一定空间来存储索引,该功能可以由Directory完成。

二、Directory类

描述了Lucene索引的存放位置。是一个抽象类,它的子类负责具体指定索引的存储位置。

FSDirectory.open方法来获取真实文件在文件系统的存储路径,然后将它们依次传递给IndexWriter类构造方法。

Lucene包含大量有趣的Directory实现。IndexWriter不能直接索引文本,这需要先由Analyzer将文本分割成独立的单词才行。

三、Analyzer类

文件文件在被索引之前,需要经过Analyzer(分析器)处理。

Analyzer是由IndexWriter的构造方法来指定的,它负责从被索引文本文件中提取语汇单元,并提出剩下的无用信息。

如果被索引内容不是纯文本文件,那就需要先将其转换为文本文档。(Tika从常用的多媒体格式文件中提取文本内容)

Analyzer是一个抽象类,而Lucene提供了几个类实现它。这些类有的用于跳过停用词(stop words)(指一些常用的且不能帮助区分文档的词,如a, an,the, in,on等);有的用于把词汇单元转成小写形式,以使搜索过程能忽略大小写差别;除此之外,还有一些其他类。

Analyzer是Lucene很重要的一部分,它的用途远远不止过滤输入这一项。

分析器的分析对象为文档,该文档包含一些分离的能被索引的域。

四、Document

Document(文档)对象代表一些域(Field)的集合。可以将Document对象理解为虚拟文档——比如Web页面、E-mail信息或者文本文件——然后可以从中取回大量数据。

文档的域代表文档或者和文档相关的一些元数据。

文档的数据源(比如数据库记录、Word文档、书中的某章节等)对呀Lucene来说是无关紧要的。

Lucene只处理从二进制文档中提取的以Field实例形式出现的文本。

上述元数据(如作者、标题、主题和修改日期等)都作为文档的不同域单独存储并被索引。

Document对象的结构比较简单,为一个包含多个Field对象的容器;Field是指包含能被索引的文本内容的类。

五、Field类

索引中的每个文档都包含一个或多个不同命名的域,这些域包含在Field类中。每个域都有一个域名和对应的域只,以及一组选项来精确控制Lucene索引操作各个域值。

搜索过程的核心类:

IndexSearcher, Term, Query, TermQuery, TopDocs

一、IndexSearcher类

IndexSearcher类用于搜索由IndexWriter类创建的索引:公开了几个搜索方法,它是连接索引的中心环节。

Donate捐赠

如果我的文章帮助了你,可以赞赏我 6.66 元给我支持,让我继续写出更好的内容)

   

(微信)                                        (支付宝)

微信/支付宝 扫一扫

Lucene学习入门——核心类API的更多相关文章

  1. Lucene学习入门——下载初识

    本文从官网下载Lucene开始,一步一步进行Lucene的应用学习研究.下载初识Snowball Stemmer 1.下载 (1)首先,去Lucne的Apache官网主页 http://lucene. ...

  2. Lucene 02 - Lucene的入门程序(Java API的简单使用)

    目录 1 准备环境 2 准备数据 3 创建工程 3.1 创建Maven Project(打包方式选jar即可) 3.2 配置pom.xml, 导入依赖 4 编写基础代码 4.1 编写图书POJO 4. ...

  3. U3D学习004——核心类和代码运行

    1.U3D核心类 2.变量 只有public变量才可以显示在inspector面板中,[serializeField]可以使private和protected变量显示在inspector面板中. 3. ...

  4. Java学习_Java核心类

    字符串和编码 字符串在String内部是通过一个char[]数组表示的,因此,可以按下面的写法: String s2 = new String(new char[] {'H', 'e', 'l', ' ...

  5. Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换

    JDBC入门 *导入jar包:驱动 *加载驱动类:Class.forName("类名"); *给出url.username.password,其中url背下来 *使用DriverM ...

  6. 理解Lucene索引与搜索过程中的核心类

    理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.ƒDirectory.ƒAnalyzer.ƒDocument.ƒField 1.IndexWriter IndexWr ...

  7. Lucene.net入门学习系列(2)

    Lucene.net入门学习系列(2) Lucene.net入门学习系列(1)-分词 Lucene.net入门学习系列(2)-创建索引 Lucene.net入门学习系列(3)-全文检索 在使用Luce ...

  8. Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  9. Lucene.net入门学习

    Lucene.net入门学习(结合盘古分词)   Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全 ...

随机推荐

  1. 【转】JavaScript里Function函数实现可变参数

    转载:  http://www.oschina.net/question/54100_15938 使用javascript类库函数时,经常会遇到一个函数,可以使用不同个数的参数的情况 比如:exp(v ...

  2. 75th LeetCode Weekly Contest All Paths From Source to Target

    Given a directed, acyclic graph of N nodes.  Find all possible paths from node 0 to node N-1, and re ...

  3. args 、kwargs不定参数通过列表、元组、字典传递

    *args .**kwargs是不定参数的表达方法,一般用于函数形参.*args .**kwargs 作为传递参数的函数,在使用过程中,可对*args .**kwargs多个输入,但是效率或者比较麻烦 ...

  4. Java升级替换java version "1.5.0"

    首先进行java安装 http://www.cnblogs.com/someone9/p/8670585.html 2. 然后查看版本信息,仍然是1.5.0 [root@OKC java]# java ...

  5. DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配

    DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配 主题自带了微博登陆接口,很简单的去新浪微博开放平台创建了网页应用,然后把APP ID和 AppSecret填好后,以为大功告成 ...

  6. vue interceptors 设置请求头

    在main.js添加过滤器,可以 Vue.http.interceptors.push((request,next)=>{ //request.credentials = true; // 接口 ...

  7. MAYA删除不干净

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  8. Json JsonUtility对字典/列表的序列化,反序列化

    Unity5.3从开始追加的JsonUtility,但是对于List 和Dictionary不能被直接序列化存储. 例如: 数据模型: using UnityEngine; using System; ...

  9. Java基础15-数组实例学生管理系统

    import java.util.Scanner; public class Student{ public static void main(String[] args){ Scanner in=n ...

  10. jQuery源代码学习_工具函数_type

    jquery源代码学习_工具函数_type jquery里面有一个很重要的工具函数,$.type函数用来判断类型,今天写这篇文章,是来回顾type函数的设计思想,深入理解. 首先来看一下最终结果: 上 ...