ElasticSearch的一点结构理解「倒排索引」&&「分片」


前言

在之前工作中,简单接触过es,当时对这个中间件没有留意,只知道是个很厉害的‘东西’,现在回想起总感觉错过了些什么,决定渐渐深入的了解一下这个厉害东西,后面还会慢慢迭代出更深的理解


想要深入学习的同学请关注:铭毅天下

一、倒排索引是什么?

顾名思义,索引‘倒’过来,拿我们基本都用过MySQL来举例子,MySQL的索引大家应该都不陌生,一般为B+Tree索引,索引Tree上每个节点都是key,通过指向找到叶子节点的data,整个过程就是通过索引来找到具体的数据。
而倒排索引则是将数据拆散,拆散的每一部分都是索引。下面详细的简单说下…

倒排索引主要有单词词典(Trem Dictionary)、倒排列表(Posting List),倒排文件(Inverted File) 组成

  • 首先将检索的单词先用分词器进行分词,将输入的文件根据规则拆分成一个或者多个term,
  • 然后再将每个Term在Term Dictinary中查找出对应的Posting List,Posting List中是数据对应的索引,可能是单个,有可能是个数组,
  • 再通过这些索引确定到具体数据

下面是倒排索引的几个关键点:

Term
输入的待检索文件经过分词器拆分得到多个Term。
Term Dictionary
使用B+Tree索引结构,记录了全部的Term,包含Trem对应Posting Lsit的指针
Posting List
1.文档ID记录原始数据的位置
2.单词频率,记录该单词在检索文本中出现次数,后续用于计算分数
3.位置,记录Trem在Term Dictinary的分词位置(会出现多次),用作词语搜索
4.偏移,记录Term开始和结束的位置,用于高亮显示 highlight
Inverted File
所有Term的Posting List都有顺序的储存在磁盘的某个文件里,储存Posting List的物理文件

二、什么是分片shard

简单来讲分片就是咱们在ES中所有数据的文件块,也是数据的最小单元块,整个ES集群的核心就是对所有分片的分布、索引、负载、路由等达到惊人的速度。

shard 分为主分片(primary shard)和副本分片(replica shard)。主分片负责写和读,而从分片负责读和备份。

primary shard 主分片

primary shard每个分片都有自己的序号,协调节点根据hash算法将数据对应到primary shard上面进行读写操作

shard = hash(document_id or routing parameter) % (num_of_primary_shards)
replica shard 副本分片

replica shard:primary shard的副本切片,系统默认副本策略为Quorum,即写入半数副本就可以返回成功

5.X 和 7.X 版本区别

5.X版本中,默认切片5个,每个index中能有多个添加type
升级到目前7.X版本,默认切片1个,每个index只能有一个type
默认一个type的原因如下:

1. 在同一个index里面,typeA的filed会占用typeB的资源(相互消耗资源),形成一种稀疏存储的情况,尤其是doc value
2. doc value为了性能会考虑保留一部分磁盘空间,可能一位置typeA需要但是typeB不需要
3. 不同type之间会干扰评分

每个shard限制最高1024个索引
查询条数阈值默认10000,子查询的阈值默认100,脚本查询阈值默认32,正则表达查询默认1000,term默认100W

es在启动的时候就已经指定了默认主切片,不能改变,但是复制切片能{"setting":{"number_of_replicas": 2}}进行添加,然后平均分到节点上。

shar的实际上就是一个Lucene的一个实例(Lucene Index),单个Lucene实例里面最多包含(Integer.MAX_VALUE-128)个Document
Lucene Index文件系统看就是一个储存一些列文件的目录,一个Lucene Index由多个独立的Segment组成,Segment中包含了文档中的Term, Term Dictionary,Document


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值