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


目录
相关文章
|
6月前
|
索引
lucene入门使用
lucene入门使用
38 2
|
关系型数据库 MySQL 数据库
为什么要使用 Lucene|学习笔记
快速学习为什么要使用 Lucene
154 0
为什么要使用 Lucene|学习笔记
|
分布式计算 算法 Hadoop
什么是 lucene|学习笔记
快速学习 什么是 lucene
什么是 lucene|学习笔记
|
索引
lucene学习笔记
lucene学习笔记
143 0
|
开发框架 Java Apache
Lucene|学习笔记
快速学习 Lucene
123 0
|
Java 索引 自然语言处理
|
分布式计算 自然语言处理 Hadoop