倒排索引

1. 何为倒排索引

索引,初衷都是为了快速检索到你要的数据。每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。对 Mysql 来说,是 B+ 树,对 Elasticsearch/Lucene 来说,是倒排索引。

ES是一个分布式的搜索与分析引擎,既然用MySQL也可以实现搜索的功能,那为什么还需要搜索引擎呢?

A relational database can store data and also index it. A search engine can index data but also store it.

在没有搜索引擎时,我们是直接输入一个网址,然后获取网站内容,这时我们的行为是:document -> word。通过文章,获取里面的单词,即正向索引 - forward index。后来我们希望能够输入一个单词,找到包含这个单词或者和这个单词相关的文章,即word -> documents,称这种索引为inverted index,国内翻译为倒排索引。

倒排索引用来存储在全文检索下某个单词在一个文档或者一组文档中的存储位置的映射,它是文档检索系统中最常用的数据结构。

2. 如何构建倒排索引

  1. 分词后,生成词条序列
    在这里插入图片描述
  2. 按词项排序
    在这里插入图片描述
  3. 词典&倒排记录表
  • 某个词项在单篇文档中的多次出现会被合并
  • 拆分成词典和倒排记录表两部分
  • 每个词项出现的文档数目(Doc Frequency,DF)会被加入

在这里插入图片描述
Lucene的倒排索引,增加了最左边的一层字典树 - Term Index,它不存储所有的单词,只存储单词前缀,通过字典树找到单词所在的块,也就是单词的大概位置,再在块里二分查找,找到对应的词,再找到单词对应的文档列表。
在这里插入图片描述
原生的Posting List有两个

References
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值