弹性 KNN 搜索 num 个候选者。候选人是如何选出的?

问题描述 投票:0回答:1

我试图理解在弹性搜索中使用 KNN 搜索时的“num_candidates”参数。

阅读我将在最后列出的一些帖子/文档时,我了解到 ES 从每个分片中选择“num_candidates”文档,然后从“num_candidates”所选文档中选择“k”个文档。

我的问题是,那些“num_candidates”文档是如何选择的?我找到了这个答案,但我不明白“如何”。

“num_candidates 与 efSearch 的想法相同。它是我们在搜索每个分片的 HNSW 图时继续跟踪的候选者数量。”

我担心的是 KNN 是否不评估索引中的所有文档。

我当前的问题是,执行 knn 搜索时,我每次都会得到不同的结果,而搜索之间的索引没有变化。

谢谢你。

相关文档:

https://www.elastic.co/search-labs/blog/elasticsearch-knn-and-num-candidates-strategies https://www.elastic.co/search-labs/blog/simplifying-knn-search https://www.elastic.co/guide/en/elasticsearch/reference/master/knn-search.html#tune-approximate-knn-for-speed-accuracy https://discuss.elastic.co/t/elastic-knn-search-questions/344684

elasticsearch vector indexing knn
1个回答
0
投票

Tldr;

是的,您不会评估分片中的所有文档。 是的,涉及到一点随机性。

搜索所有文档的成本太高。

了解

HNSW(分层可导航小世界)算法将通过将相似的向量链接在一起来工作。但不是所有矢量。

然后在搜索时,算法随机选择一个节点,并仅计算最接近的邻居。 如果邻居距离较近,则会一遍又一遍地重复该过程,直到达到最大候选数。

所有分片返回其近似选择,并计算前 k。

所以,是的,您将具有随机性,并且具有相同参数的 2 个查询可能不会得到相同的结果。

我解释的算法是实际算法的总体简化

© www.soinside.com 2019 - 2024. All rights reserved.