Qdrant 是一个用 Rust 编写的高性能向量数据库,用于生产级 RAG(检索增强生成)与语义搜索。其核心定位是提供快速的最近邻搜索,并支持向量与元数据的混合检索。
一、适用场景 资料列出以下使用时机:构建需要低延迟的生产 RAG 系统;需要混合搜索(向量 + 元数据过滤);需要借助分片/复制实现水平扩展;希望本地部署并完全掌控数据;需要每条记录存储多向量(稠密 + 稀疏);构建实时推荐系统。
二、主要能力
- Rust 驱动:内存安全、高性能。
- 丰富的过滤:检索时可基于任意 payload 字段过滤。
- 多向量:每个点支持稠密、稀疏、多稠密向量。
- 量化:标量、乘积、二值量化以节省内存。
- 分布式:Raft 共识、分片、复制。
- REST + gRPC:两套 API 功能对等。
三、核心概念
- Points(点):基本数据单元,由 ID + 向量 + payload 组成。ID 可为整数或 UUID 字符串;payload 为任意 JSON 元数据。支持批量 upsert,并可设置 wait=True 等待索引完成。
- Collections(集合):向量容器。创建时可配置向量维度、距离度量与 HNSW 参数(m、ef_construct、full_scan_threshold),并可设置 on_disk_payload 将 payload 存于磁盘。
- 距离度量:COSINE(文本嵌入、归一化向量,范围 0 到 2)、EUCLID(空间数据、图像特征,0 到 ∞)、DOT(推荐、未归一化,-∞ 到 ∞)、MANHATTAN(稀疏特征、离散数据,0 到 ∞)。
四、使用方式 安装:
- Python 客户端:pip install qdrant-client
- Docker(推荐用于开发):docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
- 带持久化存储的 Docker:docker run -p 6333:6333 -p 6334:6334 -v $(pwd)/qdrant_storage:/qdrant/storage qdrant/qdrant
基本用法:通过 QdrantClient(host="localhost", port=6333) 连接;用 create_collection 创建集合(指定 size 与 distance);用 upsert 写入带 payload 的向量;用 search 执行检索,可传入 query_filter 进行过滤,并设置 limit、with_payload、with_vectors。
检索操作:
- 基础检索:最近邻搜索。
- 过滤检索:支持 must / must_not 等条件,可用 FieldCondition、MatchValue、Range 等模型,也支持简写字典语法。
- 批量检索:通过 search_batch 与 SearchRequest 在一次请求中执行多个查询。
多向量支持:
- 命名向量:可在同一集合中配置多个向量(如 dense 与 sparse),写入时以字典形式提供,检索时用 ("dense", query_dense) 指定目标向量。
- 稀疏向量:通过 sparse_vectors_config 配置(如 SparseVectorParams 与 SparseIndexParams),写入 SparseVector(indices, values),可用于 BM25、SPLADE 等。
量化(内存优化):通过 ScalarQuantization 与 ScalarQuantizationConfig 配置,例如 type=ScalarType.INT8、quantile=0.99、always_ram=True;检索时可用 search_params={"quantization": {"rescore": True}} 对顶部结果重打分。
Payload 索引:通过 create_payload_index 为过滤字段建立索引,字段类型包括 KEYWORD、INTEGER、FLOAT、GEO、TEXT(全文)、BOOL。
生产部署:可连接 Qdrant Cloud(url 与 api_key);可通过 update_collection 调整 hnsw_config(如 ef_construct、m)或 optimizer_config(如 indexing_threshold)进行性能调优。
五、最佳实践 批量操作以提升效率;为过滤字段建立 payload 索引;大规模集合(>1M 向量)启用量化;集合超过 10M 向量时使用分片;大 payload 启用 on_disk_payload;复用客户端实例以使用连接池。
六、常见问题处理
- 带过滤的检索变慢:为过滤字段创建 payload 索引。
- 内存不足:启用量化与磁盘存储。
- 连接问题:设置 timeout 与 prefer_grpc=True。
七、替代方案 资料建议在以下情况改用其他工具:Chroma(更简单的搭建、嵌入式场景)、FAISS(追求最大原始速度、研究/批处理)、Pinecone(偏好全托管、零运维)、Weaviate(偏好 GraphQL、内置向量化器)。
八、资源与版本 GitHub:https://github.com/qdrant/qdrant;文档:https://qdrant.tech/documentation/;Python 客户端:https://github.com/qdrant/qdrant-client;云服务:https://cloud.qdrant.io。版本 1.12.0+,许可证 Apache 2.0。
九、限制与注意事项 资料强调:不得编造结果、参数、标识符、引用或统计;答案须来自检索到的文本,语料不含答案时应明确说明;版本相关细节可能过时,应以所安装版本的官方文档为准;涉及花钱、占用共享 GPU 或云配额、触及个人或患者数据、或不可撤销的操作前应先询问。若检索返回不相关片段,应先检查分块、加入 BM25/混合搜索或重排序,而非直接更换生成器;若指令中的函数、标志或端点在当前安装版本中不存在,应查阅该版本文档并告知用户,绝不臆造 API。