美文网首页
Elasticsearch中的倒排索引

Elasticsearch中的倒排索引

作者: Splunker | 来源:发表于2019-12-14 22:36 被阅读0次

倒排索引

倒排索引由两部分构成:

  1. 单词词典
  2. 倒排列表

它的结构如下:


单词词典

单词词典的特性:

  • 是文档集合中所有单词的集合
  • 它是保存索引的最小单位
  • 其中记录着指向倒排列表的指针

单词词典的实现:


单词词典有两种数据结构实现:B+树Hash表
B+树和Mysql索引结构中主键索引数据结构一样,这里就不再介绍了

哈希表的key是单词的hash值,值是单词的链表,因为hash算法会有冲突的情况发生,所以这里的值是一个集合,里面保存着相同hash值得单词以及改词指向倒排列表的指针

倒排列表

倒排列表特性:

  • 记录出现过某个单词的文档列表
  • 同时还记录单词在所有文档中的出现次数和偏移位置

倒排列表元素数据结构:
其中:

  • DocID:出现某单词的文档ID
  • TF(Term Frequency):单词在该文档中出现的次数
  • POS:单词在文档中的位置

举例
有下面单个文档

内容
文档1 百度的年度目标
文档2 AI技术生态部的年度目标
文档3 AI市场的年度目标

则他们生成的倒排索引

单词ID 单词 逆向文档频率 倒排列表(DocID;TF;<POS>)
1 目标 3 (1;1;<3>),(2;1;<5>),(3;1;<4>)
2 年度 3 (1;1;<2>),(2;1;<4>),(3;1;<3>)
3 AI 2 (2;1;<1>),(3;1;<1>)
4 技术 1 (2;1;<2>)
5 生态 1 (2;1;<3>)
6 市场 1 (3;1;<2>)

比如单词“年度”,单词ID为2,在三个文档中出现过,所以逆向文档频率为3,同时倒排索引中的元素也有三个:(1;1;<2>),(2;1;<4>),(3;1;<3>)。拿第一个元素(1;1;<2>)进行说明,他表示“年度”再文档ID为1的文档中出现过1次,出现的位置是第二个单词

倒排索引的搜索过程

直到了倒排索引的内部结构之后,就能很好理解倒排索引的搜索过程了,其内部搜索过程如下图所示:


相关文章

网友评论

      本文标题:Elasticsearch中的倒排索引

      本文链接:https://www.haomeiwen.com/subject/emihnctx.html