首页/数据/NoSQL 速查/kNN 向量检索(dense_vector)
Elasticsearch89 条

kNN 向量检索(dense_vector)

Elasticsearch 8.x 支持将 dense_vector 字段建索引后做近似 kNN:查询用 knn 参数指定查询向量、k 与候选集大小,可与全文查询组合成混合检索。

NoSQL 速查数据更新于 2026-10-12
映射"type": "dense_vector", "dims": N, "index": true, "similarity": "cosine"
查询"knn": { "field": ..., "query_vector": [...], "k": 10, "num_candidates": 100 }
组合knn 与 query 同时出现时按各自得分加权(boost 参数)

示例

示例
PUT /my-vectors
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "image-vector": {
        "type": "dense_vector",
        "dims": 3,
        "index": true,
        "similarity": "l2_norm"
      }
    }
  }
}

GET /my-vectors/_search
{
  "knn": {
    "field": "image-vector",
    "query_vector": [0.1, 2.3, -5.0],
    "k": 10,
    "num_candidates": 100
  },
  "fields": ["title"],
  "_source": false
}
num_candidates 越大召回越高、耗时越长;k 是返回条数,两者作用不同。

易错点

  • 查询向量维度必须与映射 dims 一致,否则直接报错
  • 索引型 dense_vector 显存/内存开销大,向量规模大时先评估节点资源

数据来源与参考

  • Elasticsearch Guide: k-nearest neighbor (kNN) search
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌