elasticsearch-倒排索引

学习思路

  1. 名词概念解释
  2. 举个小栗子

一、名词解释

  1. 正向索引:我们熟悉的数据库索引,通过索引值(key)找到对应的数据(value)
  2. 反向索引(倒排索引):value一般是一个文档(字符相对较长),通过分词得到多个词语,然后给每个词语建立正向索引都指向value;通过分词后的任意一个词都能查到value(实际中一般不是直接对应value,而是对应value的唯一标识,然后通过唯一标识查value);简单说就是通过value的分词查询key
  3. 文档(document):一般指一个html、json、xml、文件等;我们存在elasticsearch里的一般是一段json串
  4. 文档编号:文档的唯一标识
  5. 文档集合:就是所有的文档,就是我们存在elasticsearch里的所有数据(document)
  6. 倒排列表:出现某个词语的所有文档的集合;比如“美丽”这个词在1、2(1、2代表文档编码)文档里都存在,那么“美丽”对应的倒排列表就是[1,2]

简单说:正向是通过key查询value;反向是通过value分词查询key

我们存储的文档一般都是海量的,如果用正向索引(逐条查询)那耗时不可估量,如果使用倒排索引(按照输入的词查询这个词所查询出倒排列表,然后经过一系列的权重排序等展示给用户即可,当用户点击是通过文档编码查询对应文档即可)

二、举个小栗子

我们有5个文档

左边为文档编号,右边为文档内容,我们现在要做的就是将5个文档建立倒排索引

  1. 将每个文档进行中文分词
  2. 将每个分词对应倒排列表

当我们搜索“加盟”时就直接能找到对应的倒排列表[2,3,5],然后直接将2、3、5文档返回即可(如果返回文档很多可能有各种算法排序选择),用户点击3时直接查询3对应的文档即可、

当然实际中倒排列表并非这么简单,除了文档编号外还包含一些:词语出现的频率(TF)、文档的频率、词语出现的位置等信息,往往用于计算因此存在

如下图就是包含文档编码和词语出现频率(文档编码,出现频率)

比如“加盟”在2、3、5文档分别出现一次

实际查询“加盟”过程:

  1. 用户输入“加盟”,点击搜索
  2. 根据“加盟”查询倒排列表
  3. 根据倒排列表里的各项计算因子进行排序、选择等以最适合用户的方式展示出来
  4. 点击相应的文档,按照文档编号查询对应文档即可

 

公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值