You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSearch向量搜索:实现仅返回相似度分数并筛选field1含A/C的查询

解决方案

要实现仅返回向量相似度分数,同时筛选出field1包含"A"或"C"的文档,核心是把过滤条件和向量查询分离,让过滤操作不影响最终分数计算,具体做法如下:

  • 用bool查询的filter子句处理field1的筛选:filter只会过滤符合条件的文档,不会对最终的相似度分数产生任何影响。
  • 用bool的must子句执行向量查询(比如KNN查询),这样最终返回的_score就是纯向量相似度分数。
  • 通过_source: false控制仅返回分数(和文档ID),不返回原始字段内容。

示例查询

{
  "_source": false,
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "field1": ["A", "C"]
          }
        }
      ],
      "must": [
        {
          "knn": {
            "text_encoded": {
              "vector": [0.1, 0.2, 0.3], // 替换为你的查询向量
              "k": 20 // 按需设置返回的相似文档数量
            }
          }
        }
      ]
    }
  }
}

关键说明

  1. 为什么不用should:如果把field1的筛选放在should里,OpenSearch会将should的匹配分数和向量查询的分数加权合并,最终得到的是混合了词项匹配的相关性分数,而非纯向量相似度分数。
  2. filter的作用:filter子句仅负责文档过滤,不参与分数计算,能保证最终的_score完全来自向量查询的相似度计算。
  3. 仅返回分数:_source: false会屏蔽原始文档内容的返回,结果里只会包含文档ID和对应的_score(即相似度分数)。

内容的提问来源于stack exchange,提问作者ardito.bryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:39:56