向量字段建模

向量字段建模 #

本页聚焦向量字段的设计策略——在已经理解字段类型和映射参数的基础上,如何为实际业务做出合理的字段规划。

关于两种向量字段类型(knn_dense_float_vector / knn_sparse_bool_vector)的映射参数、数据格式、各索引模型的详细说明,请参阅 向量字段类型参考

文本字段 + 向量字段 #

一个典型的混合搜索文档同时包含文本字段和向量字段:

PUT /hybrid-index
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { "type": "text" },
      "embedding": {
        "type": "knn_dense_float_vector",
        "knn": {
          "dims": 768,
          "model": "lsh",
          "similarity": "cosine",
          "L": 99,
          "k": 1
        }
      }
    }
  }
}

这样同一份文档既支持 BM25 全文搜索,也支持 kNN 向量搜索,为 Hybrid 检索打基础。

多向量字段 #

为同一文档存储多个向量表示,例如标题和正文各一个 Embedding:

PUT /multi-vec-index
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { "type": "text" },
      "title_vec": {
        "type": "knn_dense_float_vector",
        "knn": { "dims": 768, "model": "lsh", "similarity": "cosine", "L": 99, "k": 1 }
      },
      "content_vec": {
        "type": "knn_dense_float_vector",
        "knn": { "dims": 768, "model": "lsh", "similarity": "cosine", "L": 99, "k": 1 }
      }
    }
  }
}

注意:每个向量字段都消耗存储和索引资源。只为线上查询真正需要的维度建向量字段,避免无节制堆积。

维度选择 #

  • 维度由上游 Embedding 模型决定(常见 128、256、384、768、1024 等)
  • 维度越高,存储开销越大、索引构建和查询越慢
  • 在效果满足的前提下,优先选择低维度模型(如 256~512)
  • 大维度向量多的索引建议按业务拆分

模型选择建议 #

场景推荐字段类型推荐模型推荐相似度
文本语义搜索knn_dense_float_vectorlshcosine
图像特征检索knn_dense_float_vectorlshcosinel2
小数据集精确匹配knn_dense_float_vectorexactcosine
特征标签相似度knn_sparse_bool_vectorlshsparse_indexedjaccard
位串比较knn_sparse_bool_vectorlshhamming

写入与更新策略 #

向量字段通常由外部模型计算得出,写入时要考虑:

  • 同步写入:写文档的同时调用 Embedding 模型生成向量,保证检索一致性
  • 异步补齐:先写文本文档,异步任务批量生成向量后 update,适合历史数据迁移

下一步 #