搜索引擎概述
搜索引擎其实实现就两步:搜索就是数据的搬运工,从整个互联网获取数据,
根据用户的查询需求,从自己的数据列表中取得对应的数据,返回给用户
搜索引擎的原理
搜索技术的应用场景:
如何实现商品搜索? 1000万
方式1:数据库搜索
利用SQL语句进行模糊搜索:
select * from items where title like ’%秋裤%’;
问题:
模糊搜索不一定走索引,like '%xxx%'效率很慢,建的索引将无效,查询的时候会像翻书一样一页一页的翻。
为什么会不走索引:
没有使用模糊查询,并且对应的列建立了索引,查询一定走索引
使用了模糊查询,但是左边没有%也会走索引
%Nike短袖%,不走索引
问题延伸:
返回的结果没有匹配度的概念,比如可能希望搜索的关键词在文章中出现的次数越多越是我想要的文章,
方式2:Lucene技术
解决在海量数据的情况下,利用倒排索引技术,实现快速的搜索、打分(匹配度)、排序等功能
Lucene概述
Lucene是一套用于全文检索和搜寻的开源程序库,由Apache软件基金会支持和提供。
Lucene提供了一个 简单 却 强大 的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具
Lucene并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品
全文 检索
分词:就是把整个文档的内容切分成一个个词组。
全文检索,做什么?拿到整个文章,分词 java,对每个词建立索引(记录出现的字数以及位置)
倒排索引技术
- 创建倒排索引步骤
-
创建文档列表:
lucene首先对原始文档数据进行编号(DocID),形成列表,就是一个文档列表
-
创建倒排索引列表 然后对文档中数据进行分词,得到词条。对词条进行编号,以词条创建索引。然后记录下包含该词条的所有文档编号(及其它信息)。
-
搜索流程 关键字:拉斯跳槽 ---》分词:拉斯、跳槽 –》获得的文档编号:0234
-
总结
倒排索引创建索引的流程: 首先把所有的原始文档 进行编号,形成文档列表 把文档数据进行分词,得到很多的词条,以词条为索引。保存包含这些词条的文档的编号信息。
-
搜索的过程:
当用户输入任意的内容时,首先对用户输入的内容进行分词,得到用户要搜索的所有词条 然后拿着这些词条去倒排索引列表中进行匹配。找到这些词条就能找到包含这些词条的所有文档的编号。 然后根据这些编号去文档列表中找到文档
-
Lucene与Solr的关系