超高性能向量引擎Qdrant:百万级向量毫秒检索实战
你是否还在为大规模向量数据的存储与检索效率低下而烦恼?是否在寻找一款既能处理高并发请求,又能保证检索精度的向量数据库?本文将带你深入了解Qdrant向量引擎,通过实战案例展示如何轻松实现百万级向量的毫秒级检索,让你快速掌握这一高性能工具的使用方法。
读完本文,你将能够:
- 了解Qdrant的核心优势和应用场景
- 掌握Qdrant的安装与基本配置方法
- 学会创建向量集合、添加向量数据及执行带过滤条件的搜索操作
- 熟悉Qdrant的客户端使用和API文档查阅方式
Qdrant简介
Qdrant(读作“quadrant”)是一款为下一代人工智能应用打造的高性能、大规模向量搜索引擎和向量数据库。它提供了生产级别的服务,通过便捷的API实现向量的存储、搜索和管理,并具备强大的过滤支持,适用于各种基于神经网络或语义的匹配、分面搜索等应用场景。
Qdrant采用Rust语言开发,确保了在高负载情况下的快速性和可靠性。无论是将嵌入模型或神经网络编码器转化为匹配、搜索、推荐等应用,Qdrant都能提供有力支持。同时,Qdrant还提供了完全托管的云端版本——Qdrant Cloud,包括免费套餐可供使用。
Qdrant的核心功能包括:
- 强大的过滤和负载能力,支持多种数据类型和复杂查询条件
- 混合搜索功能,结合稀疏向量与常规密集向量的优势
- 向量量化和磁盘存储选项,降低资源消耗
- 分布式部署支持,实现水平扩展
官方文档:docs/QUICK_START.md 项目源码:README.md
快速开始
安装与启动
Qdrant提供了多种安装和启动方式,满足不同场景的需求。
Python客户端
通过Python客户端可以快速开始使用Qdrant,首先安装客户端库:
pip install qdrant-client
Python客户端提供了便捷的本地启动方式:
from qdrant_client import QdrantClient
qdrant = QdrantClient(":memory:") # 创建内存中的Qdrant实例,适用于测试、CI/CD
# 或者
client = QdrantClient(path="path/to/db") # 持久化更改到磁盘,适用于快速原型开发
客户端-服务器模式
要体验Qdrant的全部功能,可以通过Docker容器运行服务端:
docker run -p 6333:6333 qdrant/qdrant
然后使用任何客户端连接,包括Python:
qdrant = QdrantClient("http://localhost:6333") # 连接到已存在的Qdrant实例
对于生产环境部署,建议参考安装和安全指南,确保启用适当的认证和配置。
创建集合
集合(Collection)是Qdrant中存储向量数据的逻辑单元。创建集合时需要指定向量的维度和距离度量方式。
使用以下命令创建一个使用点积(Dot)距离度量的集合:
curl -X PUT 'http://localhost:6333/collections/test_collection' \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 4,
"distance": "Dot"
}
}'
成功创建集合后,会返回以下响应:
{
"result": true,
"status": "ok",
"time": 0.031095451
}
可以通过以下命令确认集合是否创建成功:
curl 'http://localhost:6333/collections/test_collection'
添加向量点
创建集合后,可以向其中添加向量点(Points),每个向量点可以包含向量数据和可选的负载信息。
使用以下命令添加多个向量点:
curl -L -X PUT 'http://localhost:6333/collections/test_collection/points?wait=true' \
-H 'Content-Type: application/json' \
--data-raw '{
"points": [
{"id": 1, "vector": [0.05, 0.61, 0.76, 0.74], "payload": {"city": "Berlin"}},
{"id": 2, "vector": [0.19, 0.81, 0.75, 0.11], "payload": {"city": ["Berlin", "London"] }},
{"id": 3, "vector": [0.36, 0.55, 0.47, 0.94], "payload": {"city": ["Berlin", "Moscow"] }},
{"id": 4, "vector": [0.18, 0.01, 0.85, 0.80], "payload": {"city": ["London", "Moscow"] }},
{"id": 5, "vector": [0.24, 0.18, 0.22, 0.44], "payload": {"count": [0] }},
{"id": 6, "vector": [0.35, 0.08, 0.11, 0.44]}
]
}'
成功添加后,会返回操作结果:
{
"result": {
"operation_id": 0,
"status": "completed"
},
"status": "ok",
"time": 0.000206061
}
带过滤的搜索
Qdrant的强大之处在于能够结合向量相似度和过滤条件进行搜索。
首先执行一个基本的搜索请求:
curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \
-H 'Content-Type: application/json' \
--data-raw '{
"vector": [0.2,0.1,0.9,0.7],
"top": 3
}'
返回结果包含与查询向量最相似的前3个向量点:
{
"result": [
{ "id": 4, "score": 1.362, "payload": null, "version": 0 },
{ "id": 1, "score": 1.273, "payload": null, "version": 0 },
{ "id": 3, "score": 1.208, "payload": null, "version": 0 }
],
"status": "ok",
"time": 0.000055785
}
如果添加过滤条件,结果会有所不同。例如,搜索"city"为"London"的向量点:
curl -L -X POST 'http://localhost:6333/collections/test_collection/points/search' \
-H 'Content-Type: application/json' \
--data-raw '{
"filter": {
"should": [
{
"key": "city",
"match": {
"value": "London"
}
}
]
},
"vector": [0.2, 0.1, 0.9, 0.7],
"top": 3
}'
带过滤条件的搜索结果:
{
"result": [
{ "id": 4, "score": 1.362 },
{ "id": 2, "score": 0.871 }
],
"status": "ok",
"time": 0.000093972
}
高级功能与性能优化
向量量化与存储优化
Qdrant提供多种选项来降低向量搜索的资源消耗。内置的向量量化技术可将RAM使用量减少高达97%,并动态管理搜索速度和精度之间的权衡。
配置文件:config/config.yaml
分布式部署
Qdrant通过分片(sharding)和复制(replication)机制提供全面的水平扩展支持,实现零停机滚动更新和无缝动态扩展。
性能测试脚本:tests/basic_api_test.sh
API文档与客户端
Qdrant提供REST和gRPC两种API接口,满足不同场景的需求。
REST API
在线OpenAPI 3.0文档可通过docs/redoc/index.html访问,支持生成各种编程语言的客户端。
gRPC接口
对于生产环境中的高速搜索,Qdrant提供gRPC接口,可参考gRPC文档了解更多信息。
gRPC文档:docs/grpc/docs.md
客户端库
Qdrant提供多种官方客户端库,方便集成到不同的应用栈中:
- Go客户端:lib/api/Cargo.toml
- Rust客户端:lib/api/Cargo.toml
- JavaScript/TypeScript客户端:lib/api/Cargo.toml
- Python客户端:lib/api/Cargo.toml
- .NET/C#客户端:lib/api/Cargo.toml
- Java客户端:lib/api/Cargo.toml
社区还提供了Elixir、PHP、Ruby等其他语言的客户端实现。
总结与展望
Qdrant作为一款高性能向量数据库,为下一代人工智能应用提供了强大的支持。通过本文的介绍,你已经了解了Qdrant的基本使用方法和核心功能。
随着人工智能和机器学习的不断发展,向量数据库在语义搜索、推荐系统、图像识别等领域的应用将越来越广泛。Qdrant凭借其出色的性能和丰富的功能,正成为这一领域的重要工具。
鼓励你进一步探索Qdrant的高级功能,如混合搜索、分布式部署和性能优化,将其应用到实际项目中,体验向量数据库带来的强大能力。
如果你觉得本文对你有帮助,请点赞、收藏并关注,以便获取更多关于Qdrant和向量数据库的实用教程。下期我们将深入探讨Qdrant的分布式部署和高级搜索功能,敬请期待!
贡献指南:docs/CONTRIBUTING.md 开发文档:docs/DEVELOPMENT.md
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





