Lucene介绍
1. 目标
- 理解为什么要学习lucene
- 理解什么是顺序扫描法
- 理解什么是倒排索引
- 理解什么是lucene
2 . 讲解
2.1 为什么要学Lucene
实现商城里面的商品搜索功能,可以根据商品标题模糊查询商品。
原来的方式实现搜索功能,我们的搜索流程如下图:
上图就是原始搜索引擎技术,如果用户比较少而且数据库的数据量比较小,那么这种方式实现搜索功能在企业中是比较常见的。
但是数据量过多时,数据库的压力就会变得很大,查询速度会变得非常慢。我们需要使用更好的解决方案来分担数据库的压力。
现在的方案(使用Lucene),如下图
为了解决数据库压力和速度的问题,我们的数据库换成了索引库,使用Lucene的API的来操作服务器上的索引库。
使用索引库专门实现查询功能,而且完全和数据库进行了隔离。
2.2 数据查询方法
(1)顺序扫描法
所谓顺序扫描,例如要找内容包含一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。这种方法是顺序扫描方法,数据量大就搜索慢。
(2)倒排索引
先举一个栗子:
例如我们使用新华字典查询汉字,新华字典有偏旁部首的目录(索引),我们查字首先查这个目录,找到这个目录中对应的偏旁部首,就可以通过这个目录中的偏旁部首找到这个字所在的位置(文档)。
倒排索引:
将数据加入到索引库(你可以理解成另外一个数据库)时,会先提取数据中的词汇(分词),将词汇加入到文档域,文档域中记录了词汇以及词汇在哪条数据记录中出现过的数据下标。用户在搜索数据时,先将用户搜索的数据进行词汇提取,然后把对应词汇拿到索引域中进行匹配查找,查找后会找到对应的下标ID,再根据对应下标ID到文档域中找真实数据。
2.3 搜索技术应用场景
应用场景 :
1、 单机软件的搜索(word中的搜索)
2、 站内搜索 (baidu贴吧、论坛、 京东、 taobao)
3、 垂直领域的搜索 (818工作网)
4、 专业搜索引擎公司 (google、baidu)
2.4 Lucene介绍
(1)什么是全文索引
计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
(2)什么是Lucene
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。
- Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。
Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻, 在Java开发环境里Lucene是一个成熟的免费开放源代码工具。 - Lucene并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品。
(3)Lucene与搜索引擎的区别
全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统,包括建立索引、处理查询返回结果集、增加索引、优化索引结构等功能。例如:百度搜索、eclipse帮助搜索、淘宝网商品搜索等。
搜索引擎是全文检索技术最主要的一个应用,例如百度。搜索引擎起源于传统的信息全文检索理论,即计算机程序通过扫描每一篇文章中的每一个词,建立以词为单位的倒排文件,检索程序根据检索词在每一篇文章中出现的频率和每一个检索词在一篇文章中出现的概率,对包含这些检索词的文章进行排序,最后输出排序的结果。全文检索技术是搜索引擎的核心支撑技术。
Lucene和搜索引擎不同,Lucene是一套用java或其它语言写的全文检索的工具包,为应用程序提供了很多个api接口去调用,可以简单理解为是一套实现全文检索的类库,搜索引擎是一个全文检索系统,它是一个单独运行的软件系统
(4)Lucene官网介绍
3 总结
- 理解为什么要学习lucene
使用数据库搜索数据,实现的方式是顺序扫描法,存在全表扫描问题,会急剧拉低数据库性能,学习lucene,可以替代数据库搜索。
- 理解什么是顺序扫描法
从第1条记录开始查找,一直查找到最后一条记录。
- 理解什么是倒排索引
存储数据的时候,先将数据进行存在,然后对数据进行分词,分词存储到索引域,并记录当前词汇所出现的位置,在需要查找数据的时候,先在索引域根据分词查找对应的数据,并根据分词所记录的下标找到对应的数据。
- 理解什么是lucene
用于实现搜索引擎的工具包,提供了一系列的用于实现搜索的API程式库。