向量搜索

向量搜索 #

Easysearch 2.4.0 内置基于 Lucene 的原生 HNSW 向量搜索。新建向量索引时,推荐使用 dense_vector mapping 和 knn 查询, 不需要安装 k-NN 插件。旧 k-NN 插件继续用于已有索引和兼容场景。

核心能力 #

能力原生 HNSW 说明
向量字段单值 dense_vector,1–4096 维 float
索引Lucene HNSW,支持 mef_construction
相似度cosinedot_productl2_normmax_inner_product
查询query-level knn 和协调全局 top-k 的顶层 knn
过滤在 HNSW 搜索中使用 filter 预过滤
复合查询query-level knn 可放入 booldis_maxfunction_score 等复合查询
客户端已验证 Elasticsearch 8.19 Java 和 Python 官方客户端

快速开始 #

创建原生 HNSW 索引:

PUT /my-vectors
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "embedding": {
        "type": "dense_vector",
        "dims": 4,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "hnsw",
          "m": 16,
          "ef_construction": 100
        }
      }
    }
  }
}

写入一个向量:

PUT /my-vectors/_doc/1?refresh=true
{
  "title": "Easysearch 向量搜索入门",
  "embedding": [1.0, 0.0, 0.0, 0.0]
}

执行 HNSW 搜索:

POST /my-vectors/_search
{
  "size": 10,
  "query": {
    "knn": {
      "field": "embedding",
      "query_vector": [1.0, 0.0, 0.0, 0.0],
      "k": 10,
      "num_candidates": 100
    }
  }
}

完整参数、过滤、得分、调优、迁移和客户端示例见 原生 HNSW 搜索,mapping 约束见 dense_vector 字段类型

选择向量接口 #

Easysearch 2.4.0 同时保留原生 HNSW 和旧 k-NN 插件,两套接口不能混用:

接口字段类型查询语法适用场景
原生 HNSWdense_vectorknn query、顶层 knn2.4.0 新建的 HNSW 向量索引,推荐使用
旧 k-NN 插件knn_dense_float_vectorknn_sparse_bool_vectorknn_nearest_neighbors已有旧插件索引和兼容场景

旧插件需要单独安装,支持 knn_dense_float_vectorknn_sparse_bool_vector、LSH、exact 等既有接口。旧索引不会自动 转换为原生 HNSW;迁移时必须创建新索引并 Reindex。旧接口参考 旧 k-NN 查询 API旧 k-NN 字段类型

本章内容 #

页面说明
原生 HNSW 搜索2.4.0 dense_vector、query-level knn 和顶层 knn
向量字段建模原生 HNSW 的维度、字段数量、写入、迁移和容量设计
旧插件向量搜索指南旧插件的复合查询、function_score 和性能调优
旧插件向量字段建模旧插件多向量设计、LSH/exact 模型选型与写入策略
旧 k-NN 查询 APIknn_nearest_neighbors 查询参数完整参考
向量搜索与语义搜索向量搜索、语义搜索、复合查询与混合搜索的定位区分

相关资源 #