搜索引擎的个人学习总结

核心的概念:(反向)倒排索引,分词,相关性

搜索引擎的个人学习总结_第1张图片

上面图片来自张俊林的<<这就是搜索引擎的核心技术详解>>

索引的概念:为了能够更快地检索到信息的一种数据结构

熟悉mySQL的innoDB的索引(B+)树结构,都知道我们可以对某一列或者是联合多个列加索引,从而加快我们检索的目的.

比如:商品信息表(3000万数据),其中有列sku(商品唯一标识),名称(name),价格(price),颜色(color),品牌(brandid),供应商(providerid),是否包邮,产地等

如果用户要想搜索一个商品价格区间是30-3000,某个品牌的,供应商是某个供应商,同时名称包含了"加湿器",颜色是"白色"或者"黑色".

如果用sql语言来实现,我们发现我们大多数情况都是全表扫描,因为这些字段区分度低,建索引不划算.那么有没有一种快速的方法帮我们实现大数据量下的快速检索.

这个时候我们就需要引入搜索引擎的概念,来实现大数据的检索功能

商品的例子:我们把一个商品看做是一个文档(Document),这个文档里面的内容就是对应我们数据库中的一条商品信息.

3000万条商品就是3000万个文档,然后这些文档形成了一个文档集(Document Collection)

倒排索引(Inverted Index):倒排索引是实现单词—文档矩阵的一种具体存储形式。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:单词词典和倒排文件(搜索引擎中是反向索引,由词找到文章)

正向索引:通过正向索引,可以根据文档id快速找到这个文档,从而找到文档下的单词.(mySQL中索引是正向索引)

搜索引擎的个人学习总结_第2张图片

上面图片来自张俊林的<<这就是搜索引擎的核心技术详解>>

假设我们有如上文档,那么在数据库中,就是五条记录,对应的字段就是 文档id ,文档内容.如果数据量非常大,那么我们用like查询时走的是全表扫描.

我们看下倒排索引的结构(以单词为单位,一共16行):

搜索引擎的个人学习总结_第3张图片

上面图片来自张俊林的<<这就是搜索引擎的核心技术详解>>

大家仔细想想为什么要建倒排索引?它为啥比正排索引快?

其实很好理解:比如还是3000万的商品,颜色假如最多200个(200行数据),商品名称(加湿器,某某),还有其他属性.

总之我们用倒排索引存储的话,行数会大大降低(中文一共就10000多个单词).

此外:如果用户要想搜索一个商品价格区间是30-3000,某个品牌的,供应商是某个供应商,同时名称包含了"加湿器",颜色是"白色"或者"黑色".

这个问题也很好解决,就是取交集的过程

 

 

 

 

 

你可能感兴趣的:(搜索引擎ES)