如何在弹性KNN搜索中按分数过滤?

bvn4nwqk  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(230)

我有以下Map的索引:

{
  "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"
        }
      }
    }
  }
}

以下是我的数据在Elastic中的保存方式:

{
    "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,但无法将其应用于此查询。

esyap4oy

esyap4oy1#

自Elasticearch 8.4.0起,KNN Search API(/_knn_search)已集成到Search API(/_search)中,我们可以按照以下文档使用min_score选项:

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

相关问题