百度一面问了 3 个 ES 问题,直接干懵了!
Java技术栈
共 8776字,需浏览 18分钟
· 2024-04-03
先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题:
-
为什么我的搜索 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
评论
老爸嘲讽我了,写破代码一年就挣十几万,他在工地带50个工人,一个月光人头费就3万,让我滚回去跟他干!
点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接,进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群来自:网络,侵删有个网友的父亲是做工程的,天天就嘲笑他,说他天天写着破代码有啥用,一年就拿个十多万的死工资,然后告诉他自己在工地里面带了50个工人,一个月能抽三万
程序源代码
0
人工智能周刊#18:微软发布手机端大模型、Llama 3 中文模型列表、苹果开源新项目、
主打尊重隐私的搜索引擎 duckduckgo,也推出了 ai chat 服务,可以使用 chatgpt 或者 claude机器学习周刊:关注 Python、机器学习、深度学习、大模型等硬核技术本期目录:1、Qwen1.5-110B:Qwen1.5 系列的首个千亿参数开源模型2、苹果开源
机器学习算法与Python实战
0
微软开源MS-DOS操作系统源码,冲到GitHub第一了!
大家好,我是轩辕。这两天逛GitHub的时候,突然发现一个叫 MS-DOS的项目冲到Trending榜首了!定睛一看,微软官方啊,搜了一下才知道,原来前两天,微软把MS-DOS 4.0系统开源了!关于这个系统,估计现在很多程序员都不知道了,或者只在古老的教科书上看过这玩意儿。MS-DOS,全称为Mi
编程技术宇宙
6
今年后端爆了???
大家好,我是二哥呀。每次登录牛客,看到最多的就是各种 Java 后端岗位的喜讯,美团 OC了、快手 OC 了、就连腾讯 OC 的都是 Java 岗,我怀疑牛客是不是给我打了“只报喜不报忧”的标签?星球里也有不少球友给我发来喜讯,难道说每年都在凉凉的 Java 后端又承担起了就业的重任?!不可能,绝对
沉默王二
3
真心建议大家搞个香港身份,再不冲就晚了
香港一直有“互联网荒漠”之称,疫情这三年,香港开始大力扶持互联网 科技工程 /IT产业,公布了《香港智慧城市蓝图》。目前规划已经覆盖到交通、医疗、经济、教育、环境等多个方面。目前在智能制造,5G网络、智慧城市等领域人才,通过香港优才计划入境都极具优势。什么是香港优才计划优才计划,全称优秀人才入境计划
公子龙
0
git提交错了?别慌,直接删除提交记录
来源:juejin.cn/post/7355692365330792488👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接
小哈学Java
0
好未来测开一面,挺简单!(0428面试原题解析)
大家好,我是二哥呀。今天继续给大家分享春招面试题《好未来测开一面原题》,附详细答案,我会用通俗易懂+手绘图的方式,让天下所有的面渣都能逆袭 😁二哥的 Java 面试指南内容较长,建议正在冲刺 24 届春招和 25 届暑期实习、秋招的同学先收藏起来,面试的时候大概率会碰到,1、二哥的 Linux 速查
沉默王二
0
竞业真太TM恶心了!
看到一个新闻,本周漂亮国的联邦贸易委员会(FTC) 宣布全面禁止所有员工(包括高级管理人员)签署新的竞业禁止协议。对于现有的竞业协议,高级管理人员的现有竞业协议仍然有效,其他员工的现有竞业协议则在规定生效日期后不再强制执行。由于国外的互联网发展的早,很多国内的习惯也是照搬他们的,现在漂亮国
公子龙
2