用图讲解 ElasticSearch 搜索原理,你就明白了!
Java专栏
共 3460字,需浏览 7分钟
· 2020-10-23
注意:文末有最新Java实战项目和面试题
为什么我的搜索 foo-bar 无法匹配 _foo-bar_ ? 为什么增加更多的文件会压缩索引(Index)? 为什么ElasticSearch占用很多内存?
图解ElasticSearch
云上的集群
集群里的盒子
节点之间
索引里的小方块
Shard=Lucene Index
图解Lucene
Mini索引——segment
Segment内部
Inverted Index Stored Fields Document Values Cache
最最重要的Inverted Index
一个有序的数据字典Dictionary(包括单词Term和它出现的频率)。 与单词Term对应的Postings(即存在这个单词的文件)。
查询“the fury”
自动补全(AutoCompletion-Prefix)
昂贵的查找
在此种情况下,如果想要做优化,那么我们面对的问题是如何生成合适的Term。
问题的转化
suffix -> xiffus
如果我们想以后缀作为搜索条件,可以为Term做反向处理。(60.6384, 6.5017) -> u4u8gyykk
对于GEO位置信息,可以将它转换为GEO Hash。123 -> {1-hundreds, 12-tens, 123}
解决拼写错误
Stored Field字段查找
Fields来解决这个问题。本质上,Stored Fields是一个简单的键值对key-
value。默认情况下,ElasticSearch会存储整个文件的JSON source。
Document Values为了排序,聚合
所以,另一种数据结构解决了此种问题:Document Values。这种结构本质上就是一个列式的存储,它高度优化了具有相同类型的数据的存储结构。
搜索发生时
Lucene的一些特性使得这个过程非常重要:
Segments是不可变的(immutable) Delete? 当删除发生时,Lucene做的只是将其标志位置为删除,但是文件还是会在它原来的地方,不会发生改变 Update? 所以对于更新来说,本质上它做的工作是:先 删除 ,然后 重新索引(Re-index) 随处可见的压缩
Lucene非常擅长压缩数据,基本上所有教科书上的压缩方式,都能在Lucene中找到。缓存所有的所有
缓存的故事
举个栗子
以上场景经常在Lucene Index内部发生的。
在Shard中搜索
需要注意的是:
对于日志文件的处理
当我们想要删除旧的数据时也非常方便,只需删除老的索引即可。
如何Scale
节点分配与Shard优化
为更重要的数据索引节点,分配性能更好的机器 确保每个shard都有副本信息replica
路由Routing
一个真实的请求
Query
Aggregation
请求分发
上帝节点
根据索引信息,判断请求会被路由到哪个核心节点 以及哪个副本是可用的 等等
路由
在真实搜索之前
filters可以在任何时候使用 query只有在需要score的时候才使用
返回
来源:cnblogs.com/richaaaard/p/5226334.html
评论
太敢穿了!透视纱裙!性感火辣的身材
绝了呀今天的厂花:吴宣仪1995年1月26日,吴宣仪出生于海南省海口市,中国内地流行乐女歌手、影视演员。2016年2月,吴宣仪随宇宙少女发行首张迷你专辑正式出道。2018年4月,她参加《创造101》综艺选秀,获得第二名,成功加入火箭少女101组合。吴宣仪的颜值一直备受称赞,她的五官立体精致,皮肤白皙
逆锋起笔
0
偷偷告诉你如何一台电脑开多个微信!
大家好,我是轩辕。前几天在粉丝群里,有人问我是怎么在一台电脑上同时登录两个微信的?正好之前写过一篇文章,分析过原理,分享给没看过的小伙伴学习一下。手机端多开微信估计很多人都知道,像华为、小米等手机系统都对此做了支持,不过在运行Windows系统的电脑上怎么启动两个微信呢?其实很简单,你只需要写一个批
编程技术宇宙
0
盘点Lombok的几个骚操作,你绝对没用过!
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ ,新项目正在酝酿中
小哈学Java
0
堪称最优秀的Docker可视化管理工具——Portainer你真的会用吗?
来源:blog.csdn.net/shark_chili3007/article/details/123366179👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目
小哈学Java
0
JS的这些新特性,你都用过么?
大厂技术 高级前端 Node进阶点击上方 程序员成长指北,关注公众号回复1,加入高级Node交流群作为一门不断演进的语言,JavaScript每年都会引入新特性。这些特性的加入,能够帮助我们编写更加简洁、高效、易于维护的代码。然而,并非所有新特性
程序员成长指北
1
老爸嘲讽我了,写破代码一年就挣十几万,他在工地带50个工人,一个月光人头费就3万,让我滚回去跟他干!
点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接,进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群来自:网络,侵删有个网友的父亲是做工程的,天天就嘲笑他,说他天天写着破代码有啥用,一年就拿个十多万的死工资,然后告诉他自己在工地里面带了50个工人,一个月能抽三万
程序源代码
0
微软开源MS-DOS操作系统源码,冲到GitHub第一了!
大家好,我是轩辕。这两天逛GitHub的时候,突然发现一个叫 MS-DOS的项目冲到Trending榜首了!定睛一看,微软官方啊,搜了一下才知道,原来前两天,微软把MS-DOS 4.0系统开源了!关于这个系统,估计现在很多程序员都不知道了,或者只在古老的教科书上看过这玩意儿。MS-DOS,全称为Mi
编程技术宇宙
6
热搜第一,腾讯又一游戏停运了!
腾讯又有一款游戏要停运了。最近,腾讯游戏宣布:由于游戏的代理协议即将到期,《食物语》将于2024年6月18日11:00停止在中国大陆地区的运营。并且这次的停运话题一度冲上热搜榜第一位,引发网友热议。据了解,《食物语》是一款中华美食拟人的国风女性向RPG养成手游,于2019年9月份公开测试,运营至今已
逆锋起笔
0