【问题标题】:Elasticsearch: use distance on dense vectors in relevance score (at query time)Elasticsearch:在相关分数中使用密集向量的距离(在查询时)
【发布时间】:2020-01-29 12:39:57
【问题描述】:

我使用 elasticsearch 来组合不同的东西: - 在文本中搜索 - 基于密集向量的分数(余弦相似度)

我使用带有function_score 的查询。第一部分是文本中的搜索(给出分数),然后应用脚本来计算余弦相似度。

我的问题是在查询阶段没有计算余弦相似度,并且我在文本中的搜索充当了预过滤器。即使余弦相似度更好,我也会始终获得与文本搜索相关的结果。

这是function_score 根据doc 的标准行为:

function_score 允许您修改通过查询检索到的文档的分数。例如,如果评分函数的计算量很大,并且在过滤的文档集上计算评分就足够了,这可能会很有用。

我想在查询时计算余弦相似度,这个分数将与文本搜索相结合(同样重要)。

谢谢!

你会发现一个要点here用一个“真实”的例子来描述这个问题。

【问题讨论】:

标签: elasticsearch


【解决方案1】:

来自Elasticsearch forum

解决方案是在布尔查询中使用should 子句。

它会给出类似的东西:

GET my_index/_search
{
  "query": {
      "bool": {
        "should" : [
          {
            "match": {
                "my_text": {
                    "query": "abc"
                }
            }
          },
          {
            "script_score" : {
              "query" : {"match_all" : {}},
              "script" : {
                "source": "50 * cosineSimilarity(params.query_vector, doc['my_vector']) + 1.0",
                "params": {
                    "query_vector": [0, 0, 1]
                }
              }
            }
          }
        ]
      }  
  }
}

它将结合来自my_textscript_score 部分的分数。最终得分将是两者之和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多