Qdrant向量数据库零基础上手:30分钟跑通你的第一个相似搜索
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(urlhttp://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?waittrue \ -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设为 truepayload 设memory: cold用一点查询延迟换内存占用配置都在 config/config.yaml 里注释写得很清楚另外两个常见坑一是写数据默认是异步的想要写完立刻能查到就加?waittrue参数上面实战里就是这么干的二是集群模式下多个副本的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),仅供参考