Lucene

作者: kelaody | 来源:发表于2019-07-16 19:19 被阅读0次

一、Lucene概述

1、Lucene简介
Lucene是apache下的一个开源的全文检索引擎工具包。

2、 全文检索(Full-text Search)

定义

全文检索就是先“分词”创建索引,再执行搜索的过程。

分词:就是将一段文字分成一个个单词
全文检索就将一段文字分成一个个单词去查询数据!!!

应用场景

(1)搜索引擎(了解)
搜索引擎是一个基于全文检索、能独立运行、提供搜索服务的软件系统。

(2)电商站内搜索(重点)
思考:电商网站内,我们都是通过输入关键词来搜索商品的。如果我们根据关键词,直接查询数据库,会有什么后果?
答:我们只能使用模糊搜索,来进行匹配,会导致很多数据匹配不到。所以,我们必须使用全文检索。

二、Lucene实现全文检索的流程


image.png

全文检索的流程分为两大部分:索引流程、搜索流程。
索引流程:采集数据--->构建文档对象--->创建索引(将文档写入索引库)。
搜索流程:创建查询--->执行搜索--->渲染搜索结果。

三、配置步骤说明

(1)搭建环境(先下载Lucene)
1、下载Lucene
Lucene是开发全文检索功能的工具包,使用时从官方网站下载,并解压。
官方网站:http://lucene.apache.org/
下载地址:http://archive.apache.org/dist/lucene/java/
2、创建项目,导入包
mysql5.1驱动包:mysql-connector-java-5.1.7-bin.jar
核心包:lucene-core-4.10.3.jar
分析器通用包:lucene-analyzers-common-4.10.3.jar
查询解析器包:lucene-queryparser-4.10.3.jar

(2)创建索引库
1.采集数据
2.将数据转换成Lucene文档
3.将文档写入索引库,创建索引
(具体代码不在此写出)

(3)搜索索引库
(具体代码不在此写出)

四、分词

(1) 重要性

分词是全文检索的核心。
所谓的分词,就是将一段文本,根据一定的规则,拆分成一个一个词。
Lucene是根据分析器实现分词的。针对不同的语言提供了不同的分析器。并且提供了一个通用的标准分析器StandardAnalyzer

(2)Lucene分词的过程

分词的时候,是以域为单位的。不同的域,相互独立。
同一个域中,拆分出来相同的词,视为同一个词(Term)
不同的域中,拆分出来相同的词,不是同一个词。
其中,Term是Lucene最小的语汇单元,不可再细分。
分词的时候经历了一系列的过滤器。如大小写转换、去除停用词等。

(3)分词后索引库结构
索引库中有两个区域:索引区、文档区。
文档区存放的是文档。Lucene给每一个文档自动加上一个文档编号docID。
索引区存放的是索引。注意:
索引是以域为单位的,不同的域,彼此相互独立。
索引是根据分词规则创建出来的,根据索引就能找到对应的文档。

五、Field域
(1)三大属性

1.是否分词(tokenized)

只有设置了分词属性为true,lucene才会对这个域进行分词处理。
在实际的开发中,有一些字段是不需要分词的,比如商品id,商品图片等。
而有一些字段是必须分词的,比如商品名称,描述信息等。

  1. 是否索引(indexed)

只有设置了索引属性为true,lucene才为这个域的Term词创建索引。
在实际的开发中,有一些字段是不需要创建索引的,比如商品的图片等。我们只需要对参与搜索的字段做索引处理。

3.是否存储(stored)

只有设置了存储属性为true,在查找的时候,才能从文档中获取这个域的值。
在实际开发中,有一些字段是不需要存储的。比如:商品的描述信息。
因为商品描述信息,通常都是大文本数据,读的时候会造成巨大的IO开销。而描述信息是不需要经常查询的字段,这样的话就白白浪费了cpu的资源了。
因此,像这种不需要经常查询,又是大文本的字段,通常不会存储到索引库。

(2)特点

三大属性彼此独立。
通常分词是为了创建索引。

相关文章

  • Lucene 7.4 初体验

    前言 本文的简要内容: Lucene简介 体验Lucene Demo Lucene 核心类介绍 Lucene 索引...

  • Lucene 构造索引 & 查询 Demo

    maven引入lucene-core,lucene-analyzers-common,lucene-querypa...

  • Elasticsearch | Lucene概要

    核心要点:1、Lucene简介2、Lucene的优点3、文档自动解析流程4、Lucene架构5、Lucene的基本...

  • [转]Lucene的索引文件格式

    原文链接Lucene学习总结之三:Lucene的索引文件格式(1)、Lucene的索引文件格式(2)、Lucene...

  • Lucene的索引文件格式(基于V7_3_0)

    拜读刘超觉先的Lucene学习笔记Lucene学习总结之三:Lucene的索引文件格式(1)、Lucene的索引文...

  • Elasticsearch

    Elasticsearch 一.全文检索和Lucene Lucene基于java环境,基于Lucene之上包装一层...

  • Lucene编译

    编译 直接在lucene-solr目录下执行:ant compile 到lucene-solr/lucene目录下...

  • solr4.10.3集成tomcat

    从lucene的官方下载,lucene和solr的版本是同步更新的:http://lucene.apache.or...

  • Lucene系列文章

    注:所有内容及代码基于Lucene 8.2.0版本。 Lucene系列(1)——理论介绍 Lucene系列(2)—...

  • Elasticsearch内存

    核心概念 基于Lucene Java应用 内存使用分析 Lucene的内存消耗 倒排索引。(堆内存)Lucene中...

网友评论

      本文标题:Lucene

      本文链接:https://www.haomeiwen.com/subject/bvqxlctx.html