Qdrant向量数据库零基础上手:30分钟跑通你的第一个相似搜索
【免费下载链接】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
当你有一百万张图片想找出"和这张最像的十张",或者商品评论想按"语义相近"而不是关键词去检索时,传统 SQL 数据库就彻底歇菜了——它只会精确匹配,不会比较"像不像"。这时候你需要的是 Qdrant,一个用 Rust 写的高性能向量数据库,专攻"相似度检索"这一件事。别被"向量"两个字吓到,这篇文章我带你把它当成一个普通数据库用起来,30 分钟就能跑通完整流程。
第一步:一条命令把 Qdrant 跑起来
先别管原理,直接动手。只要机器上有 Docker,一行命令就能启动完整服务:
docker run -p 6333:6333 qdrant/qdrant启动后访问http://localhost:6333/dashboard就能看到可视化管理界面。这个启动方式来自项目官方文档:README.md;想用源码编译或自定义挂载存储路径,参考 docs/DEVELOPMENT.md。
Qdrant 同时提供 REST 和 gRPC 两套 API(默认端口 6333/6334),所以接下来你可以用任何语言调用它。Python 里是这样建立连接的:
from qdrant_client import QdrantClient client = QdrantClient(url="http://localhost:6333")到这里,"数据库"已经在你电脑上跑起来了。是不是比想象中简单?
大白话讲核心:向量、Point 和那张"导航图"
Qdrant 里的概念只有三个,用快递分拣中心来比喻最好懂:
- 向量(Vector):一串数字,相当于包裹上贴的"特征码"。同一类东西(比如同一部电影的海报)特征码会更接近。
- Point(点):一个数据单元 = 向量 + 附加信息(payload)。就像包裹本体 + 上面的备注(价格、分类、地区)。
- Collection(集合):装着同一类点的"分拣区",相当于传统数据库里的一张表。
你写入数据后,Qdrant 会给它们建一张"相似度导航图"(也就是 HNSW 索引)。找相似向量时,它不一个个翻包裹,而是像查字典一样先翻拼音目录、再定位页码,一层层缩小范围。所以数据量越大,这种"先粗筛后精找"的优势越明显。一张官方架构图可以帮你建立整体印象:
一个 Collection 被切成多个 segment 分块存储,每个 segment 内部有向量存储、payload 存储、索引等组件,数据先写 WAL 日志保证不丢,再由后台优化器整理——这套设计就是它敢接"亿级数据"的底气。
如果你好奇这些默认参数从哪来,打开 config/config.yaml 就能看到完整的 HNSW 配置注释,比如:
hnsw_index: m: 16 # 每个节点连几条边,越大越准、越占空间 ef_construct: 100 # 建索引时考虑多少个邻居,越大索引质量越高、越慢先不用改,知道它们存在即可,第五节会讲怎么调。
实战:给电影库做一个相似推荐
光说不练假把式。我们用一个真实场景走完"建集合 → 写数据 → 相似搜索"全流程:一个只有几部电影的小库,但套路和百万级数据完全一致。
1. 建集合(相当于建表),向量维度 4,用余弦距离:
curl -X PUT http://localhost:6333/collections/movies \ -H 'Content-Type: application/json' \ -d '{"vectors": { "size": 4, "distance": "Cosine" }}'2. 写入三条"电影点",注意 id 是主键,payload 是业务字段:
curl -X PUT "http://localhost:6333/collections/movies/points?wait=true" \ -H 'Content-Type: application/json' \ -d '{"points": [ {"id": 1, "vector": [0.9, 0.1, 0.2, 0.4], "payload": {"title": "星际穿越", "genre": "科幻"}}, {"id": 2, "vector": [0.1, 0.9, 0.3, 0.2], "payload": {"title": "这个杀手不太冷", "genre": "剧情"}}, {"id": 3, "vector": [0.8, 0.2, 0.3, 0.5], "payload": {"title": "盗梦空间", "genre": "科幻"}} ]}'3. 拿着一个"想看"的向量去搜,顺便用 filter 限定只看科幻片:
curl -X POST http://localhost:6333/collections/movies/points/search \ -H 'Content-Type: application/json' \ -d '{"vector": [0.82, 0.18, 0.3, 0.48], "top": 2, "filter": {"must": [{"key": "genre", "match": {"value": "科幻"}}]}}'返回结果大致长这样(分数越高越相似):
{ "result": [ {"id": 3, "score": 0.99, "payload": {"title": "盗梦空间", "genre": "科幻"}}, {"id": 1, "score": 0.98, "payload": {"title": "星际穿越", "genre": "科幻"}} ], "status": "ok", "time": 0.001 }注意两点:剧情片《这个杀手不太冷》被 filter 挡掉了,尽管它的向量也在库里;排序完全由"相似度分数"决定。这套 curl 命令不是我自己编的,项目自带一份覆盖全部基础 API 的测试脚本 tests/basic_api_test.sh,照着它敲一遍,等于把官方验收流程走了一遍。
写入时底层发生了什么?看这张时序图就懂了:请求先落 WAL 保证不丢,再交给更新器处理,优化器在后台异步合并小段。所以写入返回很快,索引整理不阻塞你:
5 个高频调参与避坑清单
用上之后,下面这几条最值得记,每条都讲"为什么 + 怎么做":
| 场景 | 怎么做 | 为什么 |
|---|---|---|
| 实时写入频繁 | 建集合时把ef_construct调小(如 64) | 它控制建索引的成本,越小写入越快,代价是索引略粗糙 |
| 高维向量(>512 维) | m调到 16~32 | 维度高需要更多连接才能保证召回率,默认 16 够用但可以更好 |
| 数据量很小 | 别动full_scan_threshold_kb(默认 10000) | 小数据集全量扫描比走 HNSW 图还快,这是特性不是 bug |
| 经常按 payload 过滤 | 先给字段建索引:PUT /collections/xxx/index | 不建索引时 filter 要扫全量数据,建了才能快 |
| 内存吃紧 | 把 HNSW 的on_disk设为 true,payload 设memory: cold | 用一点查询延迟换内存占用,配置都在 config/config.yaml 里,注释写得很清楚 |
另外两个常见坑:一是写数据默认是异步的,想要"写完立刻能查到"就加?wait=true参数(上面实战里就是这么干的);二是集群模式下多个副本的replication_factor默认是 1,生产环境记得调高。
下一步:周边生态与官方资料去哪找
如果你觉得 REST API 好用,Qdrant 还提供了 Python、Go、Rust、JavaScript、.NET、Java 等官方客户端,文档都在 README.md 里列出了入口;其中 Python 客户端是社区里用得最多的,语义搜索、推荐系统教程也最全。
想更深入的话,这几个地方值得逛:
- HNSW 索引源码:lib/segment/src/index/hnsw_index/hnsw.rs,看注释就能理解每个参数的真实作用;
- Qdrant Edge:嵌入式版本,可以直接跑在 App 进程内,适合离线场景;
- 路线图:docs/roadmap/README.md,能看到增量索引、GPU 加速等规划;
- 测试与调优脚本:tests/ 目录下的 openapi 测试、tools/unit-test-coverage.sh,想贡献代码可以从跑通测试开始。
结尾:现在就动手
到这里,你已经知道了 Qdrant 是什么、怎么启动、怎么写数据、怎么搜索、怎么调参——剩下的就是把你的真实业务数据灌进去试试。向量数据库没你想的那么神秘,一条docker run就能开始探索。去把收藏夹里那些"像不像"的需求翻出来,今晚就让它们跑起来吧 🚀
【免费下载链接】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),仅供参考