ES

第二章 倒排索引原理

2021-10-18  本文已影响0人  liaijuyyer

一 概念

倒排索引(Inverted index) 倒排索引是一种将词项映射到文档的数据结构,这与传统关系型数据库的工作方式不同。你可以把倒排索引当做面向词项的而不是面向文档的数据结构。

二 倒排索引实例

假设文档集合包含五个文档,每个文档内容如下图所示,在图中最左端一栏是每个文档对应的文档编号。我们的任务就是对这个文档集合建立倒排索引。


三 倒排索引数据结构与核心算法

倒排索引分为倒排表(posting_list)、词项字典(term dictionary)、词项索引(term index)三部分组成 其中倒排表是一个int类型的有序数组 存储了匹配某个term(词汇)的所有文档的id 词项字典分为三部分组成 tip、tim、doc(各个部分的含义如上图)

倒排索引的核心算法

4.1 FOR(Frame Of Reference)

Frame Of Reference 又叫增量编码压缩, 首先Elasticsearch要求倒排索引是有序的(也就是文档id是有序排列的) 如下图所示

4.2 RBM压缩算法

RBM压缩算法也叫RoaringBitmap算法 将一个32位无符号整数按照高16位分块处理,其中高16位作为索引存储在short数组中,低16位作为数据存储在某个特定的Container数组中。存储数据时,先根据高16位找到对应的索引key(二分查找),由于key和value是一一对应的,即找到了对应的Container。若key存在则将低16位放入对应的Container中,若不存在则创建一个key和对应的Container,并将低16位放入Container中 如下图

其中container又分为 ArrayContainerBitmapContainerRunContainer三钟

4.3 FOR压缩算法与RBM算法的适用场景

For算法是一种增量编码压缩算法 所以它适合处理的是数据分布比较致密的数组(也就是说数组相邻元素之间的差值不能太大 如果值太大则压缩效果不好) 而RBM算法则没有这种要求。如果在数据量比较大的时候采用bitmapContainer则会极大的减少存储空间

4.4 字典树(trie树)

Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较。Trie的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。

上一篇下一篇

猜你喜欢

热点阅读