1、什么是搜索?
搜索:计算机根据用户输入的关键词进行匹配,从已有的数据库中摘录出相关的记录反馈给用户。
常见的全网搜索引擎,有百度、谷歌这样搜索网站。
除此,搜索技术在垂直领域也有广泛的使用,比如淘宝、京东搜索商品,万芳、知网搜索期刊,CSDN中搜索问题贴。也都是基于海量数据的搜索。
下面以电商网站为例,看下搜索功能的使用:
2、如何处理搜索
2.1、传统关系性数据库
弊端: Stock Keeping Unit(库存量单位)
对于传统的关系型数据库对于关键词的查询,只能逐字逐行的匹配,性能非常差。
匹配方式不合理,比如搜索“小密手机”,如果用like进行匹配, 根本匹配不到。但是考虑使用者的用户体验的话,除了完全匹配的记录,还应该显示一部分近似匹配的记录,至少应该匹配到“手机”。
2.2、专业全文索引引擎
全文搜索引擎目前主流的索引技术就是倒排索引的方式。
传统的保存数据的方式
记录→单词
而倒排索引的保存数据的方式
单词→记录
例如:搜索“华为手机”
数据库保存数据如下:
搜索时只能匹配一条id为2的数据
商品ID 商品标题 商品价格
1 小米手机 1999
2 华为手机 4999
3 小米电视 2999
搜索引擎基于分词技术构建倒排索引!存储数据如下:
分词 文档ID 文档
小米 1,3 Document->[{1,小米手机,1999},{3,小米电视,2999}]
华为 2 Document->[{2,华为手机,4999}]
手机 1,2 Document->[{1,小米手机,1999},{2,华为手机,4999}]
电视 3 Document->[{3,小米电视,2999}]
用户搜索时,会把搜索的关键词也进行分词,会把“华为手机”分词分成:华为和手机两个词。
这样的话,先用【华为】进行匹配,得到id为2的文档ID,再用【手机】进行匹配,得到id为1,2的文档ID。
那么全文索引通常,还会根据匹配程度进行打分,显然2号记录能匹配的次数更多。所以显示的时候以评分进行排序的话,2号记录会排到最前面。