Appearance
写入与更新
Upsert(插入或覆盖)
同一 id 再次写入会覆盖向量与 payload(具体字段合并行为以 API 为准,通常整段替换)。
Python
python
from qdrant_client.models import PointStruct
client.upsert(
collection_name="demo_text",
points=[
PointStruct(
id=1,
vector=[0.1] * 384, # 实际应替换为真实 Embedding
payload={"title": "第一篇", "lang": "zh"},
),
PointStruct(
id=2,
vector=[0.2] * 384,
payload={"title": "第二篇", "lang": "zh"},
),
],
)Java(与集合维度一致;此处演示 4 维,384 维请用模型输出的 float[] 配合 VectorsFactory.vectors 的重载)
java
import static io.qdrant.client.PointIdFactory.id;
import static io.qdrant.client.ValueFactory.value;
import static io.qdrant.client.VectorsFactory.vectors;
import io.qdrant.client.grpc.Points.PointStruct;
import java.util.List;
import java.util.Map;
// 若集合为 384 维:float[] emb = model.embed("..."); 再 vectors(emb)(以客户端 API 为准)
PointStruct p1 = PointStruct.newBuilder()
.setId(id(1))
.setVectors(vectors(0.1f, 0.1f, 0.1f, 0.1f))
.putAllPayload(Map.of(
"title", value("第一篇"),
"lang", value("zh")))
.build();
client.upsertAsync("demo_text", List.of(p1)).get();高维向量请查阅 io.qdrant:client 中 VectorsFactory 对 float[] / List<Float> 的支持;语义与 Python 一致。
只更新 Payload
若支持 set payload 接口,可在不重复传向量的情况下更新元数据(以当前 API 为准)。大流量场景可减少带宽。
批量大小
单次 upsert 点数过多可能超时或占内存;可每批 100~500 点(视维度与机器调整),循环提交。
下一节:删除与清空。