Lucene应用实战(一)——索引创建与搜索

本文介绍了Lucene的基本概念、特点和模块构成,详细阐述了索引的创建与搜索流程,并通过代码实战展示了如何创建和搜索索引。Lucene作为一个高性能的全文检索库,常用于构建搜索平台,如Solr和Elasticsearch。
摘要由CSDN通过智能技术生成

Lucene简介

Lucene是非常优秀的成熟的开源的免费的纯java语言的全文索引检索工具包。

Lucene是一个高性能、可伸缩的信息搜索(IR)库。 Information Retrieval (IR) library.它可以为你的应用程序添加索引和搜索能力。
Lucene是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者
是以此为基础建立起完整的全文检索引擎。由Apache软件基金会支持和提供,Lucene提供了一个简单却强
大的应用程序接口,能够做全文索引和搜索。Lucene是当前以及最近几年非常受欢迎的免费Java信息检索
程序库。

Lucene的实现产品:

Solr : Lucene下的子项目,基于Lucene构建的独立的企业级开源搜索平台,一个服务。它提供了基于
xml/JSON/http的api供外界访问,还有web管理界面。

Elasticsearch:基于Lucene的企业级分布式搜索平台,它对外提供restful-web接口,让程序员可以轻
松、方便使用搜索平台。

特点

稳定、索引性能高 ;

每小时能够索引150GB以上的数据;

对内存的要求小 只需要1MB的堆内存 ;

强大的查询方式支持:短语查询、通配符查询、临近查询、范围查询等 ;

跨平台,Lucene虽然是java编写,但有多种语言实现版可选(如C、C++、Python等),不只是JAVA。

Lucene模块构成

image-20210420211856354

index模块——>主要负责索引的创建,里面有IndexWriter。
search模块——>主要负责对索引的搜索。
QueryParser——>主要负责语法分析。
Document——>相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document
对象才能进行索引。代表一个虚拟文档与字段,其中字段是可包含在物理文档的内容,元数据等对象。
analysis 模块——>主要负责词法分析及语言处理而形成Term。
store模块——>主要负责索引的读写。

索引的创建和搜索流程

索引的创建与搜索如下图所示:

image-20210420215855677

索引的创建流程

  1. 第一步,准备一些要索引的原文档(Document)数据

采集数据分类:
1、对于互联网上网页,可以使用工具将网页抓取到本地生成html文件。
2、数据库中的数据,可以直接连接数据库读取表中的数据。
3、文件系统中的某个文件,可以通过I/O操作读取文件的内容。

  1. 第二步,创建文档对象——>进行词法分析、语言处理,将原文档传给分词器(Tokenizer) 形成一系列词(Term)

获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档(Document),文档中包括一
个一个的域(Field),域中存储内容。每个Document可以有多个Field。
每个文档都有一个唯一的编号,就是文档id。
当然这里传给分词器的操作在addDocument后会自行调用 ,将原始内容创建为包含域(Field)的文档
(document),需要再对域中的内容进行分析,分析成为一个一个的单词(Term)。

  1. 第三步,索引创建。将得到的词(Term)传给索引组件(Indexer) 形成倒排索引结构

对所有文档分析得出的词汇单元进行索引,索引的目的是为了搜索,最终要实现只搜索被索引的语汇单
元从而找到Document(文档)。

创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构

下面来介绍下倒排索引。

倒排索引结构是根据内容(词汇)找文档,如下图所示:

image-20210420215606327

  1. 第四步,通过索引存储器将索引写入到磁盘。

索引的搜索流程

索引的搜索流程如下:

  1. 用户输入查询语句;
  2. 对查询语句经过词法分析和语言分析得到一系列词(Term);
  3. 通过语法分析得到一个查询树;
  4. 通过索引存储将索引读到内存;
  5. 利用查询树搜索索引,从而得到每个词(Term)的文档列表,对文档列表进行交、差、并得到结果文
    档;
  6. 将搜索到的结果文档按照对查询语句的相关性进行排序;
  7. 返回查询结果给用户。

代码实战

准备工作

新建maven工程,在pom.xml中添加lucene的相关依赖:

 <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>7.7.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>7.7.3</version>
        </dependency>

        <dependency>
            <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员资料站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值