ES物理存储逻辑

本文详细解读了Elasticsearch的物理存储逻辑,重点介绍了其基于倒排表的结构,如何通过字典树实现快速查找,并讨论了避免内存负担的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

昨天面试时被问到了ES的物理存储逻辑, 虽然知道基本结构为倒排表的物理结构,但是更详细的就不清楚,今天网上找了资料详细了解下, 引用自知乎大佬(https://zhuanlan.zhihu.com/p/413984787)

es基本结构

基本结构是倒排表:
通过将将文章分词,然后以分词结果作为查询索引,可以快速通过短语查询获得文档

比如文档A: “我爱中国” ,分词后为[我, 爱, 中国]

则es的倒排索引就变成了
[
“我” ->A
“爱” ->A
“中国” ->A
]
其中 分词后的结果又被称为term

如何快速查找term值呢

一开始没有思考这个问题, 当被问到这个问题是, 第一反应是Hash方法, 毕竟最快,可以做到O(1)的复杂度,但是仔细思考下就发现, 如果通过Hash值的话可能需要大量加载数据进入内存,这显然是不合理的

后来找到了答案,通过一种字典树的方式:
引用大佬原话:

这棵树不会包含所有的 term,它包含的是 term 的一些前缀(这也是字典树的使用场景,公共前缀)。通过 term index 可以快速地定位到 term dictionary 的某个 offset,然后从这个位置再往后顺序查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值