[ PROMPT_NODE_22982 ]
RAG Qdrant 高级用法
[ SKILL_DOCUMENTATION ]
# Qdrant 高级用法指南
## 分布式部署
### 集群设置
Qdrant 使用 Raft 共识进行分布式协调。
yaml
# 用于 3 节点集群的 docker-compose.yml
version: '3.8'
services:
qdrant-node-1:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
- "6334:6334"
- "6335:6335"
volumes:
- ./node1_storage:/qdrant/storage
environment:
- QDRANT__CLUSTER__ENABLED=true
- QDRANT__CLUSTER__P2P__PORT=6335
- QDRANT__SERVICE__HTTP_PORT=6333
- QDRANT__SERVICE__GRPC_PORT=6334
qdrant-node-2:
image: qdrant/qdrant:latest
ports:
- "6343:6333"
- "6344:6334"
- "6345:6335"
volumes:
- ./node2_storage:/qdrant/storage
environment:
- QDRANT__CLUSTER__ENABLED=true
- QDRANT__CLUSTER__P2P__PORT=6335
- QDRANT__CLUSTER__BOOTSTRAP=http://qdrant-node-1:6335
depends_on:
- qdrant-node-1
qdrant-node-3:
image: qdrant/qdrant:latest
ports:
- "6353:6333"
- "6354:6334"
- "6355:6335"
volumes:
- ./node3_storage:/qdrant/storage
environment:
- QDRANT__CLUSTER__ENABLED=true
- QDRANT__CLUSTER__P2P__PORT=6335
- QDRANT__CLUSTER__BOOTSTRAP=http://qdrant-node-1:6335
depends_on:
- qdrant-node-1
### 分片配置
python
from qdrant_client import QdrantClient
from qdrant_client.models import VectorParams, Distance, ShardingMethod
client = QdrantClient(host="localhost", port=6333)
# 创建分片集合
client.create_collection(
collection_name="large_collection",
vectors_config=VectorParams(size=384, distance=Distance.COSINE),
shard_number=6, # 分片数量
replication_factor=2, # 每个分片的副本数
write_consistency_factor=1 # 写入所需的确认数
)
# 检查集群状态
cluster_info = client.get_cluster_info()
print(f"Peers: {cluster_info.peers}")
print(f"Raft state: {cluster_info.raft_info}")
### 复制与一致性
python
from qdrant_client.models import WriteOrdering
# 强一致性写入
client.upsert(
collection_name="critical_data",
points=points,
ordering=WriteOrdering.STRONG # 等待所有副本
)
# 最终一致性(更快)
client.upsert(
collection_name="logs",
points=points,
ordering=WriteOrdering.WEAK # 主节点确认后返回
)
# 从特定分片读取
results = client.search(
collection_name="documents",
query_vector=query,
consistency="m