Skip to content

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 示例