Opendistro KNN分数在同一查询向量上给出不同的分数

问题描述

我在opendistro elasticsearch版本7.8.0中将“ cosinesimil”用作knn.space_type。我为属性类型为knn_vector的3个文档建立了索引(除knn_vector之外,提供的唯一其他属性是值为1的状态项)。这些文档的3个向量分别是(2,2),(2,1)和(2,3)。

令人惊讶的是,当我使用查询搜索向量(1,1)[状态为1的后置过滤器]时:

{
  "size": 1,"query": {
    "knn": {
      "embedding": {
        "vector": [1,1],"k": 1
      }
    }
  },"post_filter": {
    "term": {"status": 1}
  }
}

每次执行查询时,我都会得到不同的召回向量。有时候,我得到带有矢量(2,1)和_score 0.5的文档,而其他时候我得到了带有(s,1.0)的文档(2,2)。

问题:

  1. 为什么执行相同的查询时会得到不同的召回向量?
  2. 为什么带有来自Elasticsearch的向量(2,1)的doc _score变为0.5。只有cosinesimil会影响得分,并且(2,1)和(1,1)之间的cosinesimil大约为0.95?
  3. 当使用相同的ES查询且knn参数k = 3且大小= 3,并多次执行时…有时我得到_score 0.5的文档(2,1),而有时我得到0.95的分数(实际的余弦素)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)