48

Lucene 就是这么简单

 5 years ago
source link: https://mp.weixin.qq.com/s/o8YgiROB5AHUT1kmXHmTGg?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文要点:

  • Lucene 简介

  • Lucene 的核心API

  • Lucene的简单使用

  • 利用Luke查看分词结果

1. 简介

1.1 什么是lucene?

Lucene是一个开源的使用java语言编写的全文搜索引擎开发包,可以融入到自己的项目中来实现增加索引和搜索功能,其实就是一款高性能的、可扩展的信息检索工具库。和其他开源软件一样,有着与生俱来的优点:功能和结构的透明性、功能强大且具有较强的扩展性、技术社区的强大支持同时也方便技术交流。

Lucene只是一个搜索的核心库,并不提供具体的实现,但它的应用十分广泛,Solr、ElasticSearch 、Katta等底层用的都是Lucene。其特点:API简单,易于学习(但是不同的版本API差别较大)。

Lucene的原理:是倒排序索引。

那么到底什么是倒排序索引,什么又是正排序索引呢?

个人理解:

倒排序索引:即经过Lucene分词之后,它会维护一个类似于“词条--文档ID”的对应关系,当我们进行搜索某个词条的时候,就会得到相应的文档ID。

而正排序索引是:当我们进行搜索的时候,会对整个文档的内容进行搜索,不维护“词条--文档ID”的对应关系,然后如果匹配上,得到对应的文档ID,这样做肯定耗时,因为就像是数据库里的表缺少了索引一样。

2. Lucene 核心API

2.1 索引过程中的核心类

Document、 Field 、IndexWriter、 Directroy、 Analyzer

Dcoument 文档,一个文档代表一些域(Field)的集合。他是承载数据的实体,是一个抽象的概念,并不是word 或者 Txt什么的。Document代表一个被索引的基本单元。

构造方法

常用的API:

Field 索引中的每一个Document对象都包含一个或者多个不同的域(Field),域是由域名(name)和域值(value)对组成,每一个域都包含一段相应的数据信息。

常用的构造方法:

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

构造方法:

其核心API有:

Directory 是索引的存放位置,是个抽象类。具体的子类提供特定的存储索引的地址。FSDirectory 将索引存放在指定的磁盘中,RAMDirectory ·将索引存放在内存中。

FSDirectory 的创建:

RAMDirectory 创建:

Analyzer 分词器,在文本被索引之前,需要经过分词器处理,他负责从将被索引的文档中提取词汇单元,并剔除剩下的无用信息(停止词汇),分词器十分关键,因为 不同的分词器,解析相同的文档结果会有很大的不同 。Analyzer是一个抽象类,是所有分词器的基类。他通过TokenStream类似一种很好的方式,将文本逐字。

常用的分词器有:

2.2 搜索过程中的核心类

IndexSearcher 、Term、Query、TermQuery、TopDocs

IndexSearcher 调用它的search方法,用于搜索IndexWriter 所创建的索引。

构造方法:

常用API:

Term 使用于搜索的一个基本单元。

Query Lucene中含有多种查询(Query)子类。比如,TermQuery(单词条查询)、BooleanQuery(布尔查询)、PhraseQuery(短语搜索)、PrefixQuery(前缀搜索)等。它们用于查询条件的限定其中TermQuery 是Lucene提供的最基本的查询类型,也是最简单的,它主要用来匹配在指定的域(Field)中包含了特定项(Term)的文档。

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

三、简单的demo

iAbmQvM.jpg!web

POM依赖:

工具类:

创建索引:

搜索索引:

四、查看Lucene的分词结果神器之-----Luke

luke 各版本的下载git地址:https://github.com/DmitryKey/luke/releases

具体应用:

打开索引库目录:

BBvA3yf.jpg!web

qiquymN.jpg!web

查看词条:

mqMVFnr.jpg!web

进行搜索:

vQZzYfv.jpg!web

参考:

  1. 《Lucene 实战》 - 作者: Michael McCandless / Erik Hatcher / Otis Gospodnetic 出版社: 人民邮电出版社 译者: 牛长流 / 肖宇 出版年: 2011-6-1

  2. http://lucene.apache.org/

RBJFnaB.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK