solr搜索引擎中的倒排索引

倒排索引
  倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值 的各记录的地址。由于不是由记录来确定属性值,而是由属性 值来确定记录的位置,因而称为倒排索引。带有倒排索引的文 件我们称为倒排索引文件,简称倒排文件。

  传统意义的数据库,做索引时,都是一个文档id对应一个或者多个内容字段。而 倒排索引则是一个内容字段对应多个文档id。什么意思呢?举个例子,假设分别 把下面三句话存储到mysql和solr中:
I like sports
I like reading
I like reading books

  在mysql中,一个文档id对应一条记录,一条记录中就会有一个或多个内容字段。 比如:文档id为1,对应“I like sports”;文档id为2,对应“I like reading”。 而在搜索时,就会一条记录一条记录的去检索,比如:我想搜索“books”字 段,就会先从文档1找起,文档1没有,文档2也没有,文档3找到了,好,返回数 据。相对来说,这样效率有点低。

在这里插入图片描述

  而在solr中,倒排索引就相反了。它会这样做索引,“I”内容字段,对应文档id 为1和2;“like”内容字段,对应文档id为1和2;“sports”内容字段,对应文 档id为1;“reading”内容字段,对应文档id为2和3;“books”内容字段,对 应文档id为3,等等。这样做的好处在哪呢?
在这里插入图片描述
  比如:我想搜索“like reading books”这句话,我会把这句话分成三个单 词“like”、“reading”、“books”(这在solr中叫分词),这时我开始通过 内容字段查找文档id。比如我找“like”,文档id为1、2、3,那么这三个文档都 可以取出来。然后,我接着找“reading”,这时,文档id为1的没有,只剩下2 和3了。最后,我找“books”,只剩下文档id为3的存在了。根据一定的算法, 这次搜索结果,会给三个文档打分,从高到低:文档3、文档2、文档1。返还给用 户优先级,也是3、2、1。
  这样做的好处是:不用按照文档id,一个一个的遍历内容字段了,而是根据多个 内容字段,去找交叉最多的文档id(当然了,匹配文档id不止内容字段交叉,还 有时间、权重等因素,方便理解,省略了),这样做的话,搜索速度立马上升。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值