OpenSearch支持elasticsearch向量检索的底层原理

OpenSearch 如何无缝支持 Elasticsearch 风格的向量检索?

你有没有遇到过这样的场景:用户搜索“轻薄本”,系统却只返回标题含“笔记本电脑”的商品,而漏掉了语义相近但用词不同的结果?或者你想基于一张图片推荐相似风格的商品,却发现传统关键词匹配完全无能为力?

这正是 向量检索 (Vector Search)大显身手的时候。

随着大模型和嵌入技术(embedding)的普及,越来越多的应用需要理解“语义相似性”而非简单的字面匹配。Elasticsearch 作为老牌搜索引擎,在 7.x 后期版本中开始实验性地引入 dense_vector 字段与 KNN 插件;而 OpenSearch ——这个从 Elasticsearch 7.10.2 分叉出来的开源项目——不仅继承了这些能力,更在稳定性、性能和生态兼容性上做了深度优化。

那么问题来了: OpenSearch 究竟是如何在底层实现对 Elasticsearch 风格向量检索的支持的?它是怎么做到既保持 API 兼容,又能高效处理高维向量搜索的?

本文将带你深入 OpenSearch 的内核机制,从数据建模、索引结构到查询执行,一步步揭开它支持向量检索的技术面纱。


为什么是 dense_vector ?它是怎么工作的?

要搞懂 OpenSearch 的向量能力,第一个绕不开的就是 dense_vector 字段类型。

这不是一个普通的数组字段,而是专为存储深度学习生成的 稠密嵌入向量 设计的数据结构。比如 BERT 输出的 [768] 维浮点数、Sentence-BERT 编码后的句向量、CLIP 提取的图像特征……它们都可以原封不动地塞进这个字段里。

创建一个带向量的索引有多简单?

只需要在 mapping 中声明:

PUT /my-index
{
  "mappings": {
    "properties": {
      "text_embedding": {
        "type": "dense_vector",
        "dims": 384,
        "index": true,
        "similarity": "cosine"
      }
    }
  }
}

就这么几行配置,你就拥有了一个支持向量搜索的字段。其中几个关键参数值得细看:

  • dims : 固定向量维度,最大可达 16,384。所有文档必须遵守这一长度。
  • index: true : 开启近似最近邻(ANN)索引,否则只能做脚本计算。
  • similarity : 指定默认相似度算法,如余弦、欧氏距离或点积。

写入时也毫无门槛:

POST 

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值