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

如何在Elasticsearch KNN搜索中按分数过滤结果?

Elasticsearch KNN搜索中使用min_score过滤结果

问题场景

你的test-2索引映射如下:

{
  "test-2": {
    "mappings": {
      "properties": {
        "advert_id": {
          "type": "integer"
        },
        "fraud": {
          "type": "boolean"
        },
        "photos": {
          "properties": {
            "id": {
              "type": "integer"
            },
            "vector": {
              "type": "dense_vector",
              "dims": 3,
              "index": true,
              "similarity": "l2_norm"
            }
          }
        },
        "rating": {
          "type": "long"
        }
      }
    }
  }
}

数据存储格式示例:

{
    "advert_id": 123,
    "fraud": true,
    "photos": [
      {
        "id": 456,
        "vector": [
          213.32,
          3.23,
          4.21
        ]
      }
    ]
}

当前使用的KNN查询语句:

GET /test-2/_knn_search
{
  "knn": {
    "field": "photos.vector",
    "k": 1,
    "num_candidates": 5,
    "query_vector": [213.32, 3.23, 4.22]
  }
}

你需要过滤出分数大于指定值N的结果,想知道如何在该查询中应用min_score参数。

解决方法

直接将min_score参数添加到_knn_search请求的顶层(与knn字段同级)即可。示例如下(假设N为0.01):

GET /test-2/_knn_search
{
  "knn": {
    "field": "photos.vector",
    "k": 1,
    "num_candidates": 5,
    "query_vector": [213.32, 3.23, 4.22]
  },
  "min_score": 0.01
}

注意事项

由于你使用的是l2_norm相似度算法,KNN返回的分数是欧氏距离值:

  • 分数越小,说明目标向量与查询向量的相似度越高
  • 如果你的实际需求是保留相似度高的文档,应该设置min_score为一个较小的阈值(比如只保留距离小于0.1的结果),此时需要确认逻辑是否与“分数大于N”的需求匹配。

内容的提问来源于stack exchange,提问作者neo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:03:31