Elasticsearch 如何做到快速检索?和 MySQL 索引完全不同!
架构之美
共 6959字,需浏览 14分钟
· 2021-09-30
- 前言 -
最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析,就对 ES 进行了一些学习。本文整理自我自己的一次技术分享。
本文不会关注 ES 里面的分布式技术、相关 API 的使用,而是专注分享下“ES 如何快速检索”这个主题上面。这个也是我在学习之前对 ES 最感兴趣的部分。
传统关系型数据库和 ES 的差别 搜索引擎原理
倒排索引具体是个什么样子的(posting list→term dic→term index) 关于 postings list 的一些巧技(FOR、Roaring Bitmaps) 如何快速做联合查询?
- 关于搜索 -
select name from poems where content like "%前%";
- 搜索引擎原理 -
内容爬取,停顿词过滤,比如一些无用的像"的",“了”之类的语气词/连接词 内容分词,提取关键词 根据关键词建立倒排索引 用户输入关键词进行搜索
- 倒排索引 -
- 概念 -
term:关键词这个东西是我自己的讲法,在 ES 中,关键词被称为 term。
postings list:还是用上面的例子,{静夜思,望庐山瀑布}是 "前" 这个 term 所对应列表。在 ES 中,这些被描述为所有包含特定 term 文档的 id 的集合。
由于整型数字 integer 可以被高效压缩的特质,integer 是最适合放在 postings list 作为文档的唯一标识的,ES 会对这些存入的文档进行处理,转化成一个唯一的整型 id。
- 索引内部结构 -
term index:但是问题又来了,你觉得 Term Dictionary 应该放在哪里?肯定是放在内存里面吧?磁盘 io 那么慢。就像 MySQL 索引就是存在内存里面了。
空间占用小:通过对词典中单词前缀和后缀的重复利用,压缩了存储空间。 查询速度快:O(len(str)) 的查询时间复杂度。
https://www.shenyanchao.cn/blog/2018/12/04/lucene-fst/
- 关于postings list 的一些技巧 -
postings list 如果不进行压缩,会非常占用磁盘空间。 联合查询下,如何快速求交并集(intersections and unions)。
- 压缩 -
Frame of Reference:在 lucene 中,要求 postings lists 都要是有序的整形数组。
这样就带来了一个很好的好处,可以通过 增量编码(delta-encode)这种方式进行压缩。
Roaring Bitmaps (for filter cache):在 ES 中,可以使用 filters 来优化查询,filter 查询只处理文档是否匹配与否,不涉及文档评分操作,查询的结果可以被缓存。
len<4096 ArrayContainer 直接存值 len>=4096 BitmapContainer 使用 bitmap 存储
高位聚合(假设数据中有 100w 个高位相同的值,原先需要 100w2byte,现在只要 12byte) 低位压缩
- 联合查询 -
- 总结 -
- ES 索引思路 -
不需要索引的字段,一定要明确定义出来,因为默认是自动建索引的。 同样的道理,对于 String 类型的字段,不需要 analysis 的也需要明确定义出来,因为默认也是会 analysis 的。 选择有规律的 ID 很重要,随机性太大的 ID(比如 Java 的 UUID) 不利于查询。
作者:Richard_Yi
来源:
https://juejin.cn/post/6889020742366920712
评论
偷偷告诉你如何一台电脑开多个微信!
大家好,我是轩辕。前几天在粉丝群里,有人问我是怎么在一台电脑上同时登录两个微信的?正好之前写过一篇文章,分析过原理,分享给没看过的小伙伴学习一下。手机端多开微信估计很多人都知道,像华为、小米等手机系统都对此做了支持,不过在运行Windows系统的电脑上怎么启动两个微信呢?其实很简单,你只需要写一个批
编程技术宇宙
0
科普:深度学习训练,不同预算GPU选购指南
以下文章来源于微信公众号:DeepHub IMBA作者:Mike Clayton本文仅用于学术分享,如有侵权,请联系后台作删文处理导读购买显卡第一个要考虑的问题是什么?当然是预算。本文提供了不同预算的显卡选购指南,希望能对各位读者有所帮助。在进行机器学习项目时,特别是在处理深度学习和神经网络时,最好
机器学习初学者
0
测试新人,如何快速上手一个陌生的系统!
大家好,我是狂师!作为刚入行不久的测试新人,面对一个陌生的系统时,可能会感到有些手足无措。面对一个全新的系统系统,如何快速上手并展开有效的测试工作是一个重要的挑战。本文将探讨测试新人如何通过一系列步骤和策略,快速熟悉并掌握新系统的测试要点,从而提高测试效率和质量。本文旨在为测试新手提供一份指导,帮助
测试开发技术
0
光纤详解:光纤跳线如何分类,多向单模转换?
本文来自“光纤详解:光纤跳线如何分类,多向单模转换?”,光纤跳线作为光网络布线最基础的元件之一,被广泛应用于光纤链路的搭建中。如今,光纤制造商根据应用场景的不同推出众多类型的光纤跳线,如MPO/LC/SC/FC/ST光纤跳线,单工/双工光纤跳线,单模/多模光纤跳线等,它们之间各有特色,且不可替代。本
架构师技术联盟
0
如何计算数据中心的冷却需求?
今日分享 【导读】数据中心的冷却要求受多种因素影响,包括设备的热量输出、占地面积、设施设计和电气系统功率额定值等等……众所周知,环境因素会严重影响数据中心设备。过多的热量积聚会损坏服务器,可能导致其自动关闭。经常在高于可接受的温度下运行服务器会缩短其使用
数据中心运维管理
0
5000w+ 的大表如何拆?亿级别大表拆分实战复盘
前言笔者是在两年前接手公司的财务系统的开发和维护工作。在系统移交的初期,笔者和团队就发现,系统内有一张5000W+的大表。跟踪代码发现,该表是用于存储资金流水的表格,关联着众多功能点,同时也有众多的下游系统在使用这张表的数据。进一步的观察发现,这张表还在以每月600W+的数据持续增长,也就是说,不超
码农编程进阶笔记
0
如何做到无感刷新Token?
来源:juejin.cn/post/7316797749517631515为什么需要无感刷新Token?自动刷新token前端token续约疑问及思考图片为什么需要无感刷新Token?「最近浏览到一个文章里面的提问,是这样的:」当我在系统页面上做业务操作的时候会出现突然闪退的情况,然后跳转到登录页面
Java专栏
2
新时代写作与互动:《一本书讲透 Elasticsearch》读者群的创新之路
1、《一本书讲透 Elasticsearch》销售最近进展汇报给大家同步一下《一本书讲透 Elasticsearch》图书的进展情况,本周五(2024年4月26日),出版社编辑老师反馈图书相关销量进展:预计全网销量 1000 册+,发货量 2462 册(截止2024年4月28日)。2023年12月2
铭毅天下
0