960 字
5 分钟
Qdrant 快速入门
Qdrant(发音为”quadrant”)是一个用Rust编写的向量相似度搜索引擎和向量数据库。它提供了一个生产级服务,带有便捷的API用于存储、搜索和管理点(带有额外payload的向量)。
核心特性
- Qdrant专为扩展过滤支持而设计,使其适用于各种基于神经网络或语义的匹配、多面搜索等应用。
- 由于使用Rust编写,即使在高负载下也能保持快速和可靠。
- 支持向量附加任何JSON格式的payload,允许基于这些payload的值进行存储和过滤。
- payload支持多种数据类型和查询条件,包括关键词匹配、全文过滤、数值范围、地理位置等。
快速开始(Docker)
1. 获取并运行Docker镜像
# 拉取最新的预构建镜像docker pull qdrant/qdrant
# 使用默认配置运行docker run -p 6333:6333 qdrant/qdrant
运行后,Qdrant将在默认端口6333上可访问,并使用默认配置。数据将存储在docker容器内的默认路径中。如果要将数据持久化到本地目录,可以挂载卷。
2. 创建集合
首先创建一个使用点积(Dot Product)相似度度量的集合:
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}
3. 添加向量点
向集合中添加包含向量和payload的点:
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]} ]}'
4. 基本向量搜索
执行简单的向量相似度搜索,返回与查询向量最相似的3个点:
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], "limit": 3}'
预期响应:
{ "result": [ { "id": 4, "score": 1.362 }, { "id": 1, "score": 1.273 }, { "id": 3, "score": 1.208 } ], "status": "ok", "time": 0.000055785}
5. 使用过滤条件的向量搜索
通过添加过滤条件,可以限制搜索结果仅包含符合特定条件的点:
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}'
使用Python客户端
Qdrant提供了多种客户端库,其中Python客户端提供了同步和异步请求的类型定义,以及一些便捷的辅助方法。
安装
pip install qdrant-client
创建集合
from qdrant_client import QdrantClientfrom qdrant_client.http.models import Distance, VectorParams
client = QdrantClient("localhost", port=6333)client.recreate_collection( collection_name="test_collection", vectors_config=VectorParams(size=4, distance=Distance.DOT),)
添加点
from qdrant_client.http.models import PointStruct
client.upsert( collection_name="test_collection", wait=True, points=[ PointStruct(id=1, vector=[0.05, 0.61, 0.76, 0.74], payload={"city": "Berlin"}), PointStruct(id=2, vector=[0.19, 0.81, 0.75, 0.11], payload={"city": ["Berlin", "London"]}), PointStruct(id=3, vector=[0.36, 0.55, 0.47, 0.94], payload={"city": ["Berlin", "Moscow"]}), PointStruct(id=4, vector=[0.18, 0.01, 0.85, 0.80], payload={"city": ["London", "Moscow"]}), PointStruct(id=5, vector=[0.24, 0.18, 0.22, 0.44], payload={"count": [0]}), PointStruct(id=6, vector=[0.35, 0.08, 0.11, 0.44]) ])
搜索
search_result = client.search( collection_name="test_collection", query_vector=[0.2, 0.1, 0.9, 0.7], limit=3)
内存模式(适用于开发和测试)
Python客户端允许在不运行Qdrant服务器的情况下以本地模式运行相同的代码:
from qdrant_client import QdrantClient
# 使用内存模式,适用于开发和原型设计client = QdrantClient(":memory:")
# 或者持久化到磁盘# client = QdrantClient(path="path/to/db")
生产环境配置
在生产环境中,可以通过配置文件覆盖默认设置。默认配置文件位于config/config.yaml
,在生产环境中可以通过在docker容器内提供/qdrant/config/production.yaml
来覆盖值。
在真正的生产环境中,应通过设置service.apiKey
启用身份验证。对于生产环境,还应考虑设置--read-only
和--user=1000:2000
以进一步保护Qdrant实例。或者使用Helm图表或Qdrant Cloud,它们默认设置这些值。
使用自定义配置运行Docker:
docker run -p 6333:6333 \-v $(pwd)/path/to/data:/qdrant/storage \-v $(pwd)/path/to/custom_config.yaml:/qdrant/config/production.yaml \qdrant/qdrant
Qdrant 快速入门
https://blog.lpkt.cn/posts/qdrant-quickstart/