Lucene学习总结

简介: Lucene学习总结

数据分类


  结构化数据:有固定类型或者有固定长度的数据

  例如:数据库中的数据(mysql,oracle等), 元数据(就是windows中的数据)



  结构化数据搜索方法:

  数据库中数据通过sql语句可以搜索

  元数据(windows中的)通过windows提供的搜索栏进行搜索


  非结构化数据:没有固定类型和固定长度的数据

  例如: Word文档中的数据, 邮件中的数据



  非结构化数据搜索方法:

  Word文档使用ctrl+F来搜索

 

顺序扫描法:


  Ctrl+F中是使用的顺序扫描法,拿到搜索的关键字,去文档中,逐字匹配,直到找到和关键字一致的内容为止.

  优点: 如果文档中存在要找的关键字就一定能找到想要的内容

  缺点: 慢, 效率低

 

全文检索算法(倒排索引算法):


  将文件中的内容提取出来, 将文字拆封成一个一个的词(分词), 将这些词组成索引(字典中的目录), 搜索的时候先搜索索引,通过索引找文档,这个过程就叫做全文检索.

  分词: 去掉停用词(a, an, the ,的, 地, 得, 啊, 嗯),因为搜索的时候搜索这些词没有意义,将句子拆分成词,去掉标点符号和空格

  优点: 搜索速度快

  缺点: 因为创建的索引需要占用磁盘空间,所以这个算法会使用掉更多的磁盘空间,这是用空间换时间


全文检索的原理类似是我们使用的字典,有目录和正文两部分组成,查询的时候先查询目录,然后根据目录查询页数,根据页数查询我们需要的内容。


什么是Lucene?

 

Lucene是apache下的一个顶级开源项目,提供了一个全文检索引擎工具包,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供的一个简单易用的工具包,以方便的在目标系统中实现全文检索功能。


使用场景


对于数据量大、数据结构不固定的数据采用全文检索方式搜索,比如百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。

 

Lucene应用领域


   1.互联网全文检索引擎(比如百度,  谷歌,  必应)

   2.站内全文检索引擎(淘宝, 京东搜索功能)

   3.优化数据库查询(因为数据库中使用like关键字是全表扫描也就是顺序扫描算法,查询慢)

Lucene实现全文检索的流程



20170802195359044.png


需要我们注意的是在索引库中存储了两部分内容:索引和原始文档的内容


 1、获得原始文档

 

原始文档是指要索引和搜索的内容。原始内容包括互联网上的网页。数据库中的数据。磁盘上的文件等,我们获取的过程就是一个流的操作


2、 创建文档对象

 

获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档(Document),文档中包含一个一个的域(field),域中存储内容。这里我们可以将磁盘上的一个文件当成一个document,Document中包括一些Field(file_name 文件名称  file_path  文件路径 file_size 文件大小  file_content 文件内容)如下图:


20170802200041161.png


注意:对于field的要求应该和数据库中的定义区分  不同的Document可以有不同的Field。同一个Document可以有相同的Field(域名和域值都相同),每个文档都有一个唯一的编号,就是文档id,文档的id增长方式为自增长,每次加一,从零开始。


 3、分析文档

 

将原始文档创建为包含域的文档,需要在对域中的内容进行分析,分析的过程是经过对原始文档提取单词,将字母转换为小写,取出标点符号,取出停用词等过程生成最终语汇单元,可以将语汇单元理解为一个一个的单词。

每个单词叫做一个term,不同域中拆分出来的相同的单词是不同的term,term中包含两部分 一部分是文档的域名,另一部分是单词的内容。


 4、创建索引

 

对所有的文档分析得出的语汇单元进行索引,索引的目的是为了搜索,最终实现只搜索被索引的语汇单元从而找到文档。大致过程如下:


20170802201302393.png

倒排索引

20170802201443652.png


查询索引

 

查询索引也是搜索的过程。搜索就是用户输入关键字,从索引(index)中进行搜索的过程,根据关键字搜索索引。根据索引找到对应的文档,从而找到要搜索的内容

 

小结

本文对lucene进行了简单的介绍,总结了整体的检索流程,让我们对全文搜索中涉及到的一些基本概念有了一定的了解,在下面一篇博客中,我们会详细介绍域的概念,因为这个概念是我们经常使用的,希望能给读者一些收获


目录
相关文章
|
安全 Java Linux
一文了解 Maven 的 settings.xml 配置文件
一文了解 Maven 的 settings.xml 配置文件
2414 0
|
消息中间件 安全 Java
学习认识Spring Boot Starter
在SpringBoot项目中,经常能够在pom文件中看到以spring-boot-starter-xx或xx-spring-boot-starter命名的一些依赖。例如:spring-boot-starter-web、spring-boot-starter-security、spring-boot-starter-data-jpa、mybatis-spring-boot-starter等等。
274 4
|
Java 测试技术 数据库连接
PHP和Java哪个更难?
【7月更文挑战第2天】PHP和Java哪个更难?
235 0
|
存储 Shell 开发工具
查看git 的远程地址
在Git中,你可以通过几种不同的命令来查看远程仓库的地址。以下是一些常用的方法: ### 1. 使用`git remote -v`命令 这是查看远程仓库地址最常用的命令。它会列出所有远程仓库的名称(如`origin`)以及对应的URL(包括fetch和push的URL,如果它们不同的话)。 ```bash git remote -v ``` 输出示例: ``` origin https://github.com/username/repo.git (fetch) origin https://github.com/username/repo.git (push) ``` ###
1738 12
|
Java
线程池中线程抛了异常,该如何处理?
【8月更文挑战第27天】在Java多线程编程中,线程池(ThreadPool)是一种常用的并发处理工具,它能够有效地管理线程的生命周期,提高资源利用率,并简化并发编程的复杂性。然而,当线程池中的线程在执行任务时抛出异常,如果不妥善处理,这些异常可能会导致程序出现未预料的行为,甚至崩溃。因此,了解并掌握线程池异常处理机制至关重要。
913 0
|
人工智能 语音技术
通义语音AI技术问题之语义VAD模型对于传统VAD模型的问题如何解决
通义语音AI技术问题之语义VAD模型对于传统VAD模型的问题如何解决
869 0
|
机器学习/深度学习 语音技术
Hotword模型在语音识别系统中定义为能够识别特定关键词或短语(也称为唤醒词)的模型
Hotword模型在语音识别系统中定义为能够识别特定关键词或短语(也称为唤醒词)的模型
773 9
|
消息中间件 Docker 索引
【一文解读】阿里自研开源核心搜索引擎 Havenask简介及发展历史
本次分享内容为Havenask的简介及发展历史,由下面五个部分组成(Havenask整体介绍、名词解释、架构、代码结构、编译与部署),希望可以帮助大家更好了解和使用Havenask。
72748 0
【一文解读】阿里自研开源核心搜索引擎 Havenask简介及发展历史
|
网络协议 Docker 容器
dockerq启动报错(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --t
dockerq启动报错(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --t
461 0
linux 手动编译安装 pkg-config 步骤
linux 手动编译安装 pkg-config 步骤