谈谈你对倒排索引的理解

谈谈你对倒排索引的理解

在聊倒排索引之前,我们需要先了解一下‘索引’概念。

什么是索引呢?

索引是为了加速对表中数据行的检索而创建的一种分散的存储结构

通俗的来讲索引好比就是新华字段中拼音的首字母还有偏旁,根据拼音的首字母和偏旁能很快的查找到你需要的内容。

索引的作用是什么呢?

  • 保证数据的准确性

    唯一的索引值对应着唯一的数据

  • 加快检索速度

    索引可以极大的加快检索速度

  • 提高系统性能

    索引可以有效提高系统的性能

倒排索引

elasticSearach 为啥要用倒排索引 而不是mysql 中 **B+**树呢?

先看看B+树的结构
在这里插入图片描述

先简单讲一下 B+树

B+树的特征
  • 每一个节点是一个dataPage,在mysql中每个dataPage的大小为16K
  • 就假如ID为28这个节点来说,单个数据量越大,单个节点里面放的数据量就越少
  • 一般都会使用ID作为索引存储,ID字段比较短适合存储。不适用字段多长的字段
  • ID的数值越大,树越深。IO越大B+树默认支持千万级别的数据量。

综合上述特征b+树不适用做上亿级别的存储数据结构,就mysql而言左模糊查询会导致索引失效,而去全文去检索。IO压力增大,得不偿失。

下面聊一下倒排索引

倒排索引的组成:

  1. term index:词典索引
  2. term dictionary:词典词项
  3. posting list:倒排表(采用两种的压缩算法 1.FOR(稠密数组) 2.roaring bitmaps(稀疏数组))

举个简单的例子来讲吧

idtitledesc
1Welcome to Shanxi!欢迎来到陕西
2I like Xi 'an very much我很喜欢西安
3I like Xi 'an noodles very much我很喜欢吃西安的面

以title这一列来讲es根据默认的分词器(以及normzation)分为为以下的此项

Welcome to Shan xi an I like xi an very much noodles

term indexterm dictionaryPosting List
welcome1
to1
shan1
xi1,2,3
an2,3
i2,3
like2,3
noodles3
very2,3
much2,3

简单来说正排索引就是根据元素查找文档,倒排索引失根据元素查找文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨大脸I

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值