开源项目
qdrant/qdrant avatar
qdrant/qdrant

Qdrant 评测:Rust 向量数据库的过滤能力与部署边界

Qdrant - 用于下一代人工智能的高性能、大规模矢量数据库和矢量搜索引擎。也可在云中使用 https://cloud.qdrant.io/

34,578 个 Star2,674 个 ForkRustApache-2.0

秒懂

它是什么?
Qdrant 是一个用 Rust 编写的向量相似度搜索引擎,主打扩展过滤支持和多向量检索。本文基于官方文档与仓库信息,分析其架构、运行方式、适用场景以及一些需要注意的局限。
适合谁用?
Qdrant 适合需要复杂过滤条件与向量检索结合的场景,比如多租户隔离、分面搜索或带有丰富元数据的语义匹配。它的 Rust 实现和 gRPC 接口适合对延迟敏感的生产环境。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Rust(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题

Qdrant 解决的是向量检索与结构化过滤结合的问题。普通向量数据库只能按相似度排序,但实际应用常常需要先按某些条件过滤,比如商品类别、用户权限或时间范围。Qdrant 的核心卖点就是扩展过滤支持,它把向量和附加的 payload 存在一起,搜索时能同时施加过滤条件。这适合语义搜索、分面搜索和推荐系统。它面向的是需要把神经网络编码器变成可用产品的工程师,而不是只做原型验证的人。

架构与数据流

Qdrant 采用客户端-服务器架构,服务端用 Rust 编写。数据模型是点,每个点包含向量和负载。向量可以是稠密、稀疏或多向量。搜索时,客户端发送查询向量和过滤条件,服务端在候选集中计算相似度。文档提到有 REST API 和 gRPC 接口,后者用于生产环境的高速查询。Qdrant Edge 是另一种形态,它嵌入在应用进程内,数据本地存储,并能与服务器同步。这意味着同一个代码库可以有两种部署方式,但数据流不同:服务器模式走网络,Edge 模式走进程内调用。

快速启动的坑

官方给的启动命令是 docker run -p 6333:6333 qdrant/qdrant。但 README 明确警告,这个命令启动的是不安全部署,没有认证,对所有网络接口开放。这是很多人忽略的点。如果你在云服务器上直接跑这个命令,等于把数据库暴露在公网。文档要求部署前阅读安装和安全指南。连接客户端也很简单,Python 示例是 QdrantClient(url="http://localhost:6333")。但注意,这只是连接,不包含认证配置。生产环境必须自己处理认证,否则数据可能被任意读写。

多向量与稀疏向量的实际意义

Qdrant 支持稠密、稀疏和多向量搜索。稀疏向量适合全文检索场景,因为词频向量通常很稀疏。多向量则允许一个点有多个向量,比如一个文档的不同段落。这比传统单向量数据库更灵活,但也带来复杂度。你需要决定每个向量用什么距离函数,比如余弦。在 Edge 示例中,创建向量参数时要指定 size 和 distance。这种设计让你可以针对不同字段用不同向量,但配置成本更高。如果应用只需要一个向量,这些功能就是多余的。

客户端生态与集成

官方客户端覆盖 Go、Rust、JavaScript/TypeScript、Python、.NET/C# 和 Java。这比很多数据库的官方支持更广。社区还有 Kotlin 和 PHP 客户端,但质量未知。对于主流语言,官方库意味着更好的维护和文档。但如果你用冷门语言,就得自己生成客户端,因为 REST API 有 OpenAPI 3.0 规范,理论上能生成任何语言的代码。gRPC 接口也提供了另一种选择。不过,生成客户端不等于有现成的查询抽象,你可能要自己处理重试和错误。

Edge 模式的取舍

Qdrant Edge 是轻量级版本,设计用于边缘设备和资源受限环境。它运行在应用进程内,数据本地存储,可以同步到服务器。这适合离线应用或低延迟场景。但 Edge 不是免费的午餐。它意味着你需要在应用代码里管理数据生命周期,包括快照恢复。文档提到 EdgeShard 有方法管理数据、查询和恢复快照。这意味着你要写更多代码来处理同步逻辑。如果你只需要本地搜索,Edge 可能比服务器模式更简单,但如果你需要多设备同步,复杂度会上升。

限制与错误使用场景

Qdrant 不适合简单的向量搜索需求。如果你只需要按相似度排序,没有复杂过滤,其他更简单的方案可能更省事。另一个问题是默认部署不安全,容易误用。文档没有提供内置认证的细节,这意味着你需要自己配置反向代理或网络策略。此外,Qdrant 是 Rust 写的,性能好,但如果你不熟悉 Rust,调试服务端问题会更困难。最后,过滤功能强大,但过滤条件写不好可能导致性能下降。文档没有给出过滤查询的性能指南,所以你需要自己测试。

替代方案对比

与 Qdrant 最直接的对比是 Milvus 或 Weaviate。Milvus 也支持向量检索,但它的架构更复杂,依赖分布式组件。Qdrant 的 Rust 单二进制可能更易部署。Weaviate 则强调内置的模块化集成,比如与 OpenAI 的对接。Qdrant 的差异点在于过滤支持和多向量原生支持。Milvus 的过滤能力较弱,Weaviate 的过滤也有限。如果你需要复杂的布尔过滤和租户隔离,Qdrant 的设计更直接。但如果你需要开箱即用的 AI 模型集成,Weaviate 可能更省事。选择取决于你对过滤需求的重视程度。

编辑结论

Qdrant 适合需要复杂过滤条件与向量检索结合的场景,比如多租户隔离、分面搜索或带有丰富元数据的语义匹配。它的 Rust 实现和 gRPC 接口适合对延迟敏感的生产环境。但如果你只需要简单的向量搜索,或者希望完全托管且不想自己运维,那么 Qdrant Cloud 或更轻量的方案可能更合适。在采用前,先验证你的数据规模下过滤查询的性能,以及是否真的需要多向量支持。同时确认你的客户端语言有官方支持,避免依赖社区维护的绑定。最后,务必阅读安全指南,因为默认的 docker run 命令没有认证,暴露在所有网络接口上。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记