1.7 LUCENE
总目录:https://www.jianshu.com/p/e406a9bc93a9
Hadoop - 子目录:https://www.jianshu.com/p/9428e443b7fd
LUCENE
搜索技术理论基础
全文搜索
在最开始,我们进行全文搜索的话,就是将用户准备搜索的关键字放到数据库中进行模糊匹配。
原始搜索技术
这种实现方式适合小型企业,或者用户量,数据量较少时,应用的比较多。
但是大型企业中因为数据库中数据量太大了,搜索变大越来越慢,IO的开销越来越大。所有就有了我们Lucene实现的方案:
Lucene搜索技术
相当于我们给数据库建立了一个图书管理员,这个管理员负责帮我们统筹所有的数据。
数据库中的数据都会在索引库放一个索引(或者摘要),能够表明这条数据是关于什么方面的,这样我们让Lucene去取数据,肯定比我们直接检索来的方便。
同时通过爬虫或者文档输入的数据,也用Lucene进行归档和存储,这就大大降低了我们数据库各方面的损耗。
常用的查询方法
顺序扫描法
- 描述
顺序扫描法是一种憨憨查询方式,他会按照顺序从头到尾查询我们所有的文档,如果文档中包含这种字符串,就把他提取出来,没有的话就继续扫描下一个,直到扫描完成。 - 优点
准确率高,是一种时间换质量的查询方式 - 缺点
查询速度会随着查询量的增大而减慢。 - 应用场景
数据库模糊查询
文本编辑器的查找功能(Ctrl+F)
倒排索引
-
描述
查询前会先将查询的内容提取出来,组成文档(正文)和目录(索引),索引和文档有关联关系,通过索引找到文档的操作叫做全文检索。
举个例子:
我们先要从新华字典中找到一个字,首先从偏旁部首入手,然后通过偏旁部首查找到这个字。偏旁部首就是他的索引,字就是他的正文。 -
优点
准确率高,速度快,不会因为数据量增加而变慢。
为什么倒排索引比顺序扫描快?
因为索引可以去掉重复的词,世界上的句子可以有千千万万,但是组成句子的词语是有限的,找出这些句子特殊的标识词组成索引。然后通过索引查找到这些句子肯定比直接去句子里面找要快得到。
那么我们是怎么从句子里面提取标识词的呢?
首先把句子分词,在去掉我们规定的停用词(自定义),例如我,他,你等等;然后去掉空格,特殊符号,将大写字母转换为小写字母,最后去重。
- 缺点
以空间换时间。
- 应用场景
站内搜索
垂直领域搜索
专业的搜索引擎公司
什么是LUCENE
什么是全文检索
计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数与位置,当用户查询时,检索程序就会按照事先定义好的索引去文章中查找,并将查找的结果反馈给用户的检索方式。
LUCENE的起源
他是道克马丁的早期开源项目,是一个开放源代码的全文检索工具包,但是他不是一个完整的引擎,他是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,以及部分文本分析引擎。
索引和搜索流程图
索引和搜索流程图1.首先是原始文档,这部分数据可以通过爬虫,格式化文档,数据库等等来输入。
2.之后的绿色部分是对输入的文档进行处理构建一个索引库。
3.最后是用户与索引库的一个交互。
像谷歌,百度这样的搜索引擎公司,他们内部的网络爬虫会全年无休的爬取网络上的信息补充到索引库汇总。
而京东,淘宝只会在用户商品上架时,将这个商品信息从数据库转移到索引库中。
创建索引的过程
1.获取文档
获取文档就是将各类输入导入Lucene。
2.构建文档对象
在建立索引前,需要把文档转换成文档对象(Document),文档内会包含一个一个的域(field),域内包含着索引的字段数据。
文档对象
每个document内会有很多field,同一个文档对象可以由相同的field。
域内保存的数据以k-v的形式保存,k为域名,v为域值。
3.分析文档
Lucene的切分词是贪婪切分模式,会把所有可能出现的词语都切分出来。例如上的例子切分出来的结果就是:
vivo,X23,8GB,128GB,幻夜,幻夜蓝,全网,全网通,网通,4G,手机,华为,HUAWEI,麦芒,麦芒7,6GB,64G,亮黑,亮黑色,黑色,全网,全网通,网通,4G,手机。
4.组成索引
对所有文档切分出来的语汇单元进行索引,索引的目的是为了搜索,最终要实现通过搜索的词汇得到文档。
创建索引是指对语汇单元索引,通过词汇找文档,这种索引的结构叫做倒排索引结构。
索引库