Qdrant 向量数据库:一条命令起步,3 个上生产前必调的能力
2026/9/2 11:09:47 网站建设 项目流程

Qdrant 向量数据库:一条命令起步,3 个上生产前必调的能力

【免费下载链接】qdrantQdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/项目地址: https://gitcode.com/GitHub_Trending/qd/qdrant

语义搜索换个说法就查不到?Qdrant 向量数据库把文本转成向量做相似度匹配,一条 docker 命令就能起步,过滤、量化、混合搜索开箱即配。

一、它适合谁:先判断该不该用它

Qdrant 是一个用 Rust 写的向量相似性搜索引擎,你往里存的是“带载荷(payload)的向量点”,出来的是“最像查询向量的前 N 个”。它主打两件事:扛得住高并发的检索,以及对 payload 的复杂过滤。适合语义检索、RAG、推荐、以图搜图这类“按相似度找”的场景。

方案核心定位过滤 / 检索上手成本
关系数据库(+向量扩展)精确匹配为主,顺带向量强在 SQL,向量能力偏弱低,多数团队已有
Qdrant 自建纯向量相似性检索稠密+稀疏+多向量,过滤语法丰富中,一条命令起服务
托管向量云同上,免运维同 Qdrant低,但绑定厂商

一句话说明边界:如果你的数据不到几万条、又只需要关键词精确匹配,关系型数据库就够了,不必引入向量库。

二、10 分钟拿到第一个结果

先起一个服务,数据落在容器里,跑通再谈配置:

docker run -p 6333:6333 qdrant/qdrant # 6333 是 REST 端口

用 Python 连上,建一个集合。集合(collection)就是“存同类向量的库”,建的时候必须定死向量维度距离度量这两件事,后面所有点都得符合它:

from qdrant_client import QdrantClient, models client = QdrantClient(url="http://localhost:6333") # 连本地实例 client.create_collection( collection_name="docs", vectors_config=models.VectorParams(size=4, distance=models.Distance.COSINE), # 4维、余弦距离 )

每个点 = 一个向量 + 一份 payload(任意 JSON 元数据,用来做过滤)。写入两个点:

points = [ models.PointStruct(id=1, vector=[0.1, 0.2, 0.3, 0.4], payload={"title": "向量入门", "tag": "ai"}), models.PointStruct(id=2, vector=[0.5, 0.6, 0.1, 0.2], payload={"title": "RAG 实践", "tag": "rag"}), ] client.upsert(collection_name="docs", points=points) # upsert=有则更新无则新增

然后搜。注意“最像”不等于“对”,所以可以叠一层过滤,只在你关心的范围内找:

res = client.search( collection_name="docs", query_vector=[0.2, 0.3, 0.3, 0.4], # 查询向量 limit=3, query_filter=models.Filter( must=[models.FieldCondition( key="tag", match=models.MatchValue(value="ai"))]), # 只留 ai 标签 ) print(res[0].score) # 相似度分数,越大越像

跑通后值得看一眼集合“里面长什么样”:一个集合拆成若干段(segment),每段自带向量存储、向量索引、payload 和索引,再加一个 WAL 做写入兜底。这就是它既快又能容错的原因。

三、值得深挖的 3 个能力

3.1 向量量化:把内存占用压下来 ⭐

解决什么问题:向量默认按 float32 常驻内存,100 万条 768 维 ≈ 2.5GB+,规模一大就扛不住。

怎么配:建集合时挂上标量量化(int8)即可,Qdrant 官方称可把内存占用最多压掉 97%;要更极致就上乘积量化(PQ)或二值量化(Binary)。量化在 lib/quantization 里实现。

注意什么:量化是用精度换内存。召回掉得明显时,打开rescore用原始向量二次排序,把精度找回来;量化对已有数据不生效,得重建索引。

3.2 混合搜索:语义和关键词一起查 ⚡

解决什么问题:纯稠密向量抓不住型号、编号这类精确词;纯关键词又不懂“语义相近”。

怎么配:给同一个点同时存稠密向量和稀疏向量(稀疏常用 BM25),查询时一次发出,用 RRF 或 DBSF 两种融合策略把两路结果合成一个排序。

注意什么:你得同时维护两套向量的生成链路;稀疏向量喂关键词、稠密向量喂语义,分工别混。

3.3 复杂过滤:像 SQL 一样筛

解决什么问题:光“像”不够,你还得按类别、价格区间、地理位置筛。

怎么配:filter 支持must/should/must_not三段,条件是关键词匹配、数值范围、地理围栏等,可任意组合。

注意什么:常被过滤的字段建payload 索引会快很多;没建索引就退化成全表扫描,数据量大时延迟明显。

四、上生产前必看:单节点先跑稳

先上单节点 + 持久化存储 + 配置文件这一种形态,验证数据量和延迟后再考虑集群。生产配置里,认证、加密、省内存这三处是重点:

service: api_key: "your_secret_api_key" # 开启请求认证 enable_tls: true # 传输加密,配了 api_key 就该开 storage: on_disk_payload: true # 载荷走磁盘,省 RAM optimizers: indexing_threshold_kb: 10000 # 段内向量达到该 KB 才建索引

关键调优参数速查(对照 config/config.yaml 调):

参数作用建议值
storage.on_disk_payload载荷放内存还是磁盘数据量大就true省 RAM
optimizers.indexing_threshold_kb起建向量索引的门槛默认 10000,小机器可调低
hnsw_index.m图索引每个节点的边数16,越大越准越占内存
hnsw_index.ef_construct建图时考虑多少邻居100,建索引更快可调小
service.max_request_size_mb单请求最大体积默认 32,批量大就调高
storage.wal.wal_capacity_mb单个 WAL 段大小默认 32,写多可加大

写入路径是这样的:请求先进 WAL 落盘、返回成功,再由 Updater 更新段、Optimizer 在后台合并重建。理解了它,你就能看懂“为什么刚写的点偶尔搜不到”。

监控盯三个指标就够了(都是 Prometheus 格式):

  • 内存占用:resident memory 逼近上限是头号风险,配合量化和on_disk_payload压。
  • 磁盘用量:向量、WAL、快照都吃磁盘,提前留余量。
  • 请求延迟 / 优化任务:搜索 P99 升高、优化器长时间不跑,都要告警。
curl -s http://localhost:6333/health # 探活;/metrics 拿指标,/cluster 看集群状态

五、踩坑现场:先对号入座

现象原因解法
搜索精度明显偏低维度/距离度量没对齐,或索引还没建好保证查询向量维度、distance 与集合一致;等索引完成或临时exact=true
刚写入的点搜不到优化器还没把新段建进索引属正常延迟,等优化完成;急用就开启精确搜索
内存持续涨、进程 OOM向量+载荷全量常驻内存开量化、on_disk_payload: true,必要时调max_resident_memory_percent配额
请求报 413 / 大 payload 被拒撞了max_request_size_mb上限调大该参数,或分批写入
集群节点间通信失败、共识卡住p2p 端口(默认 6335)不通,或节点 TLS 证书不一致放开 6335,所有节点用同一套证书
重启后加载慢、反复 OOM 崩溃段全量载入内存low_memory_mode(如no_resident)把组件降级为磁盘版

更多写入与容错细节,可翻 lib/collection 模块和 docs/DEVELOPMENT.md。

收尾:我该不该用 Qdrant

  • ✅ 数据是“按相似度找”,而非纯精确匹配,且规模上到百万级以上
  • ✅ 检索要带复杂过滤(多字段、范围、地理、多租户),Qdrant 的 payload 过滤正好覆盖
  • ✅ 在意内存成本,需要量化把向量占用压下来
  • ✅ 能接受先用单节点 Docker 起步,再按需扩集群
  • ❌ 只有关键词匹配、数据量很小,关系型数据库更省事

如果上面勾中三条以上,它大概率就是你这一层该用的向量引擎——先 docker 一条命令跑通,把量化和过滤配好,再谈扩缩。

【免费下载链接】qdrantQdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/项目地址: https://gitcode.com/GitHub_Trending/qd/qdrant

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询