你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
发现
分享
文章
活动
登录
居然是你
几个比较复杂的ES相关问题
Elasticsearch
| 作者
Charele
| 发布于2023年09月01日 | 阅读数:
2255
分享到:
QQ空间
新浪微博
微信
QQ好友
印象笔记
有道云笔记
以下都是些乱78糟,我比较困惑的,没有解决的疑惑。
问题1:
ES代码虽然多,但相对来说,比Lucene简单得多。
如果ES代码理解难度如果一颗星,个人感觉Lucene就是4颗星。
问题:删除一个快照,它的流程是怎么样的?
它是如何一步一步的调整元数据,直至成功删除掉一个快照的?
起点在TransportDeleteSnapshotAction,
我看来看去,总觉得chaos,理不清里面的头绪,
图片与主题无关:
没有找到相关结果
已邀请:
与内容相关的链接
提交
3 个回复
Charele
-
Cisco4321
赞同来自:
问题2:
InternalEngine这个类,看过ES代码的,肯定了解了。
这里,它在构造时,会判断如果 x < y,
就会去恢复些东西(恢复啥,不是关注点),
其中的x就是上次持久化的本地检查点 y就是我们经常看见的maxSeqNo,
这是InternalEngine构造方法(就是说,会在分片打开时执行),
打开分片,无外乎两种情况:
A 新建分片的打开,这时x == y == -1,肯定不会发生 x < y
B 老分片的打开(比如ES重启时)
这时x,y这两个值是从磁盘中读出来的
但在什么场景下发生x < y呢?
我想不出来,也测试不出来.我看到的都是x == y
Charele
-
Cisco4321
赞同来自:
问题3:
和自动机有关。ES中,很多查询类型都是“自动机查询”,
比如前缀查询,模糊查询等等,
(短语查询不是,开始我以为也是,但它不涉及自动机)
大佬博客里有介绍,
https://www.amazingkoala.com.c ... .html
额外说一句,他这里个人感觉不好的地方。
像我们初学者,认知过程一般都从易到难,
而他只讲了range查询,不是最复杂的,但不是最简单的。
最简单是前缀查询,他应该用前缀查询来举例子,这样会比较好一些。
自动机分为确定型跟不确定型,
在Lucene里处理的都是确定型的。
如果是“不确定”的,它会转成"确定”的
问题:什么情况下,它会产生(临时的)不确定的自动机?
我没找到
至于这个方法用啥手段把不确定变为确定,
也许只有自己看了才能体会
Charele
-
Cisco4321
赞同来自:
问题4:
Knn相关的问题
开始以为就是每个数据跟目标算下距离,找到最小的。
后来发现,并不是这样的。
他用了叫HNSW的东东来查找
(这个东东很庞大,比数据本身大多了,存在vex索引文件里)
我在B站截了个图,大概就是这样子的:
HNSW里的H就是层次化的意思,它这个层级,是如何形成的。
比如我有100万个数据,它会分几层,查找是从哪个开始的?
又比如100万3维向量,和100万个200维向量,层数是不是一样?
这就是分层的秘密所在,名字叫getRandomGraphLevel,
昨一看有些糊涂,它就是产生一个随机数,随机产生新层?
实际上不是,它的结果是固定的。
比如你有200个向量数据,编号是: 0, 1, 2, 3, 4,5,,,198,199。
首先,所有数据都会放入level0(就是最底层)
当你输入4号数据时,就会建level1
到输入171号数据时,就会建level2,
这些数据量,会建3层结构。
而这171号数据,就是图中那个“查询入口”(源代码中称为EntryNode)
问题:这个简单的方法,是产生新层号的原理是什么呢???
要回复问题请先
登录
或
注册
发起人
Charele
Cisco4321
活动推荐
Aug
15
2025 Zabbix 中国峰会
上海
·
8-15 周五
·
报名中
Oct
17
第27届 GOPS 全球运维大会暨研运数智化技术峰会 · 上海站
上海
·
10-17 周五
·
报名中
相关问题
这个问题有点难?
怎么解决elasticsearch集群占用太多虚拟内存(VIRT)的问题?占用了几十个G,有什么可以对它进行限制的相关设置吗?
集群稳定性的一些问题(一定量数据后集群变得迟钝)
elasticsearch functionScoreQuery scriptFunction效率问题
索引某个shard无法恢复的问题
logstash获取时间的问题
es scroll查询全部数据问题
elasticsearch 中的store 以及倒排索引的问题
关于单个机器分片数容量问题
es集群gc问题
logstash导入mysql上亿级别数据的效率问题
问题状态
最新活动:
2023-09-18 02:31
浏览:
2255
关注:
1
人
3 个回复
Charele - Cisco4321
赞同来自:
问题2:
InternalEngine这个类,看过ES代码的,肯定了解了。
这里,它在构造时,会判断如果 x < y,
就会去恢复些东西(恢复啥,不是关注点),
其中的x就是上次持久化的本地检查点 y就是我们经常看见的maxSeqNo,
这是InternalEngine构造方法(就是说,会在分片打开时执行),
打开分片,无外乎两种情况:
A 新建分片的打开,这时x == y == -1,肯定不会发生 x < y
B 老分片的打开(比如ES重启时)
这时x,y这两个值是从磁盘中读出来的
但在什么场景下发生x < y呢?
我想不出来,也测试不出来.我看到的都是x == y
Charele - Cisco4321
赞同来自:
和自动机有关。ES中,很多查询类型都是“自动机查询”,
比如前缀查询,模糊查询等等,
(短语查询不是,开始我以为也是,但它不涉及自动机)
大佬博客里有介绍,
https://www.amazingkoala.com.c ... .html
额外说一句,他这里个人感觉不好的地方。
像我们初学者,认知过程一般都从易到难,
而他只讲了range查询,不是最复杂的,但不是最简单的。
最简单是前缀查询,他应该用前缀查询来举例子,这样会比较好一些。
自动机分为确定型跟不确定型,
在Lucene里处理的都是确定型的。
如果是“不确定”的,它会转成"确定”的
问题:什么情况下,它会产生(临时的)不确定的自动机?
我没找到
至于这个方法用啥手段把不确定变为确定,
也许只有自己看了才能体会
Charele - Cisco4321
赞同来自:
Knn相关的问题
开始以为就是每个数据跟目标算下距离,找到最小的。
后来发现,并不是这样的。
他用了叫HNSW的东东来查找
(这个东东很庞大,比数据本身大多了,存在vex索引文件里)
我在B站截了个图,大概就是这样子的:
HNSW里的H就是层次化的意思,它这个层级,是如何形成的。
比如我有100万个数据,它会分几层,查找是从哪个开始的?
又比如100万3维向量,和100万个200维向量,层数是不是一样?
这就是分层的秘密所在,名字叫getRandomGraphLevel,
昨一看有些糊涂,它就是产生一个随机数,随机产生新层?
实际上不是,它的结果是固定的。
比如你有200个向量数据,编号是: 0, 1, 2, 3, 4,5,,,198,199。
首先,所有数据都会放入level0(就是最底层)
当你输入4号数据时,就会建level1
到输入171号数据时,就会建level2,
这些数据量,会建3层结构。
而这171号数据,就是图中那个“查询入口”(源代码中称为EntryNode)
问题:这个简单的方法,是产生新层号的原理是什么呢???