西安网站建设平台重庆seo整站优化外包服务
Qdrant 是近年来非常热门的向量数据库,广泛用于文本搜索、推荐系统、图像相似度匹配等场景。本文将带你从最实用的三个层面入手,快速上手并用好 Qdrant 的核心能力:
✅ 远程连接配置详解
🏗️ 集合创建参数全面解释
🔍 查询参数高级用法
🔥本例为Qdrant 1.14.2(注意!)
✅ 一、远程连接配置详解(QdrantClient)
在本地你可以用 host 和 port 来连接 Qdrant 服务,而在生产中,通常使用 Qdrant Cloud 提供的 HTTPS 接口和 API 密钥:
from qdrant_client import QdrantClientclient = QdrantClient(url="https://your-qdrant-endpoint.qdrant.io",api_key="your-api-key-here"
)
参数 | 类型 | 说明 |
---|---|---|
url | str | Qdrant 服务的远程地址,必须是 HTTPS |
api_key | str | API 密钥,保护访问权限 |
timeout | int/float | (可选)请求超时,默认 5 秒 |
prefer_grpc | bool | (可选)是否优先使用 gRPC,速度更快,但需服务器支持 |
📌 本地开发:
client = QdrantClient(host="localhost", port=6333)
🏗️ 二、创建集合(Collection)参数详解
向量搜索的前提是集合(Collection),它类似于表结构,用于存储向量及其 metadata。下面是一个完整的创建集合示例:
from qdrant_client.http.models import VectorParams, Distanceclient.create_collection(collection_name="c_names",vectors_config=VectorParams(size=4,distance=Distance.COSINE)
)points = [PointStruct(id=str(uuid.uuid4()), vector=[0.1, 0.2, 0.3, 0.4], payload={"name": "Tokyo"}),PointStruct(id=str(uuid.uuid4()), vector=[0.2, 0.1, 0.4, 0.3], payload={"name": "Kyoto"}),
]client.upsert(collection_name="c_names", points=points)
print("✅ 已插入测试数据")
✳️ 参数解析
参数名 | 说明 |
---|---|
collection_name | 集合名称(自定义) |
size | 向量维度(取决于你的 embedding 模型) |
distance | 相似度计算方式(推荐使用 COSINE) |
📌 常见模型维度对照
模型名称 | 维度(size) |
---|---|
MiniLM-L12-v2 | 384 |
e5-base | 768 |
text-embedding-3-small | 1536 |
🛠️ 可选参数(进阶):
参数名 | 说明 |
---|---|
on_disk_payload | 是否将 payload 存储到磁盘(节省内存) |
hnsw_config | 索引构建参数,可优化召回速度 |
🔍 三、查询参数详解:
query_points()
实战
Qdrant 旧接口 search() 已弃用,推荐使用新版 query_points()。这是最常用的检索 API,支持分页、筛选、相似度阈值等强大功能:
from qdrant_client.http.models import QueryVectorresults = client.query_points(collection_name="c_names",query=[0.1, 0.2, 0.3, 0.4],limit=5,with_payload=True,score_threshold=0.9
)print("🔍 查询结果:")
for r in result.points:print(f"- id: {r.id}, score: {r.score}, payload: {r.payload}")
📌 参数详解
参数名 | 类型 | 说明 |
---|---|---|
collection_name | str | 要查询的集合名 |
query | QueryVector | 查询向量,维度必须匹配 |
limit | int | 返回结果数量上限 |
with_payload | bool | 是否返回 metadata(如地名) |
score_threshold | float | 仅返回相似度高于该阈值的记录 |
offset | int | 分页偏移量(跳过前N条) |
filter | Filter 对象 | 高级筛选条件(如国家名) |
🔥
score_threshold
使用技巧
如果你希望结果尽量“接近”原始向量,可以使用 score_threshold,比如:
score_threshold=0.95
这意味着只保留相似度高于 0.95 的结果,常用于高置信度翻译、名称匹配等场景。
🎯 高级筛选:按字段过滤(
filter
)
from qdrant_client.http.models import Filter, FieldCondition, MatchValuemy_filter = Filter(must=[FieldCondition(key="country",match=MatchValue(value="Japan"))]
)
然后作为参数传入:
results = client.query_points(collection_name="place_names",query=[...],filter=my_filter,limit=10
)
📌 总结速查表
场景 | 推荐配置 |
---|---|
文本相似搜索 | distance=COSINE + 384 维 |
精准匹配 | 加入 score_threshold=0.9+ |
分类过滤 | 使用 filter 结合 payload |
排查效果 | 开启 with_vectors=True 查看返回向量 |
🎁 附加建议
-
使用 sentence-transformers 快速生成文本向量;
-
本地测试建议使用 Docker 启动 Qdrant;
-
在线部署推荐使用 Qdrant Cloud,支持备份与权限管理;
-
API 更新频繁,记得关注 官方文档。