Appearance
Java:集合与点操作
创建集合
java
import io.qdrant.client.QdrantClient;
import io.qdrant.client.QdrantGrpcClient;
import io.qdrant.client.grpc.Collections.Distance;
import io.qdrant.client.grpc.Collections.VectorParams;
QdrantClient client =
new QdrantClient(QdrantGrpcClient.newBuilder("localhost").build());
String collection = "demo_java";
int size = 384;
client.createCollectionAsync(collection,
VectorParams.newBuilder()
.setSize(size)
.setDistance(Distance.Cosine)
.build()
).get();Upsert 点
使用官方推荐的 静态工厂,避免手写 Protobuf:
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[] 转为 List<Float> 或使用 vectors 的重载(见 Javadoc)
float[] emb = new float[384];
java.util.Arrays.fill(emb, 0.01f);
List<Float> vecList = new java.util.ArrayList<>(384);
for (float f : emb) vecList.add(f);
PointStruct p = PointStruct.newBuilder()
.setId(id(1L))
.setVectors(vectors(vecList))
.putAllPayload(Map.of(
"title", value("Java 写入"),
"lang", value("zh")))
.build();
client.upsertAsync(collection, List.of(p)).get();若 vectors 提供 float[] 重载,可直接 vectors(emb)。
集合是否存在 / 删除
java
boolean exists = client.collectionExistsAsync(collection).get();
if (exists) {
client.deleteCollectionAsync(collection).get();
}Retrieve 点
通过 getPointsAsync(或当前版本等价 API)按 id 拉取 payload;方法名以 JavaDoc 为准。
异常与重试
gRPC 可能因网络抖动失败;生产应对 upsert / search 做有限次重试与日志。
下一节:搜索 Java 示例。