你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
Charele - Cisco4321
赞同来自:
要回复问题请先登录或注册
Cisco4321
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)
问题:这个简单的方法,是产生新层号的原理是什么呢???