【大数据】Lucene全文搜索引擎入门篇(零基础小白也适用)
日期: 2019-11-19 分类: 个人收藏 404次阅读
前言:Lucene是apache老爹开源的一款全文搜索引擎,虽然目前已被市面上一些更好用的搜索引擎逐步替代,但作为搜索引擎的鼻祖,仍然有必要学习一番,而且有了Lucene的基础之后,学习solr,elastichSearch也会更容易理解。
看完本篇,你将了解到Lucene是什么,Lucene的使用场景,原理,什么是倒排索引,如何分词,以及如何使用lucene实战构建简易的搜索引擎等。
目录
1.Lucene可以用来做什么?
我们知道,传统关系型数据库在数据量大到一定量级后(一般是单表超过500W行或者2G左右),查询速度会变得非常缓慢,也比较吃资源,加上需求中经常会有一些模糊查询,模糊查询可能会导致传统数据库的索引失效,这时候如果再用传统数据库就呵呵了。所以在好的电商系统中,搜素引擎都是标配。通过搜素引擎,可以很好的减轻数据库的读压力。除此之外,像我们熟知的百度,谷歌等搜索大佬,也都有用到搜索引擎,搜索引擎还可以用于搭建文库,总之很强大,可以做很多事情。
2.Lucene的原理
Lucene的原理我说白话一点,就是先把被搜索内容按照一定规则进行分词并存储,生成一个目录,然后把你输入的搜索关键词也进行分词,然后与前面生成的目录中的关键词进行匹配,如果匹配到,就可以快速定位到该被搜索内容的存储位置,从而实现搜索。说简单点就是这样,当然里面有很多细节,先不着急,等看完倒排索引之后你会对Lucene的原理有更深的了解。
如图,比如我搜索了程序员秃头,搜索引擎一般会根据一定的拆分规则,把我输入的“程序员秃头”拆分成:程序员,秃头,头等关键字。然后与爬虫爬取到的大量文档里的关键词进行匹配(这些大量文档会按照一定规则预先分词,建立索引,然后存储起来),如果匹配到了就可以返回给用户了,返回的结果可以对关键词添加一些“高亮”,标红等特效,也可以按照一定规则对搜索结果进行排序。
3.Lucene的倒排索引
这里我援引别人已经画好的图来解释下倒排索引,描述也力求简洁,帮助快速理解:
下面第一张图是文档的原始内容和编号,第二张图是建立的倒排索引。
倒排索引的建立步骤:
①先对原始文档中的内容按照一定规则进行分词,至于如何分先不用管,我后面会讲到。
②然后对分词后的单词在原始文档中进行定位,比如“谷歌”在原始文档中的1-5号文档都有出现过,所以谷歌的倒排列表就是:1,2,3,4,5. 其它倒排列表以此类推。
有了这样一套对应列表之后,下次用户如果输入了“网站”这个关键词,系统就可以通过倒排列表快速定位到原始文档中的第5项数据,类似于生成了一本书的一个目录,告诉你几个关键词,可以在目录中快速定位具体的文档在多少页,不用再一页一页翻了。
看到这里你应该明白倒排索引的原理了,可以先思考下为啥叫“倒排”索引,而不是别的名字?
回答这个问题前,先看下什么是正向索引:正向索引建立的关系是由文档->关键词的,也就是给定一篇文档,记录关键词在文档中出现的位置,通过文档来关联关键词的,这种方式在数据量小的情况下完全OK,但互联网这片大海中,文档的量及是宇宙级的,这种方式要扫描的文档驴辈子都扫不完。倒排索引正好是逆向思维,把文档的关键词提取,然后通过关键词取关联文档,这样就极大的减轻了扫描的量级。
关于倒排索引就提这么多,实际上要比这个复杂一些,感兴趣的建议读完之后可以回头来深入研究,以免打断思路,这里直接给出我援引的博主图片的博客地址: 除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐