Lucene 之全文检索技术介绍
前言:本文只介绍了全文检索的基础概念,后面陆续会介绍 Lucece 的使用。
1.什么是全文检索
1.1.数据的分类
我们生活种的数据总体分为两种:结构化数据和非结构化数据
- 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
- 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件等。
1.2.结构化数据搜索
常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。
为什么数据库搜索很容易?
因为数据库中的数据存储是有规律的,有行有列而且数据格式、数据长度都是固定的。
1.3.非结构化数据查询方法
从多个文本文件中找出包含 spring 单词的文件。
几种方式实现:
-
目测(开玩笑,一个一个字看,搞笑 : ()
-
使用程序把文档读取到内存中,然后匹配字符串。顺序扫描(Serial Scanning)。
-
把非结构化数据变成结构化数据,全文检索(Full-text Search)。
先根据空格进行字符串拆分,得到一个单词列表,基于单词列表创建一个索引。
然后查询索引,根据单词和文档的对应关系找到文档列表。这个过程就叫做全文检索。
索引:通俗来说是一个为了提高查询速度,创建某种数据结构的集合。
1.4.全文检索
将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
最常见的:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种可以一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。
1.5.如何实现全文检索
可以使用Lucene实现全文检索。**Lucene是apache下的一个开放源代码的全文检索引擎工具包。**提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。
1.6.全文检索的应用场景
- 搜索引擎
百度、360 搜索、谷歌、搜狗
- 站内搜索
论坛搜索、微博、文章搜索
-
电商搜索
淘宝搜索、京东搜索
-
只要是有搜索的地方就可以使用全文检索技术
【Lucene】系列文章
【Lucene】全文检索技术介绍
【Lucene】实现全文检索
【Lucene】索引库的维护
【Lucene】索引库的查询