Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# The version of qdrant to use to download protos
qdrantProtosVersion=v1.17.0
qdrantProtosVersion=v1.18.0

# The version of qdrant docker image to run integration tests against
qdrantVersion=v1.17.0
qdrantVersion=v1.18.0

# The version of the client to generate
packageVersion=1.17.0
packageVersion=1.18.0
56 changes: 56 additions & 0 deletions src/main/java/io/qdrant/client/QdrantClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,12 @@
import io.qdrant.client.grpc.Points.CountPoints;
import io.qdrant.client.grpc.Points.CountResponse;
import io.qdrant.client.grpc.Points.CreateFieldIndexCollection;
import io.qdrant.client.grpc.Points.CreateVectorNameRequest;
import io.qdrant.client.grpc.Points.DeleteFieldIndexCollection;
import io.qdrant.client.grpc.Points.DeletePayloadPoints;
import io.qdrant.client.grpc.Points.DeletePointVectors;
import io.qdrant.client.grpc.Points.DeletePoints;
import io.qdrant.client.grpc.Points.DeleteVectorNameRequest;
import io.qdrant.client.grpc.Points.DiscoverBatchPoints;
import io.qdrant.client.grpc.Points.DiscoverBatchResponse;
import io.qdrant.client.grpc.Points.DiscoverPoints;
Expand Down Expand Up @@ -2348,6 +2350,60 @@ public ListenableFuture<UpdateResult> deletePayloadIndexAsync(
future, PointsOperationResponse::getResult, MoreExecutors.directExecutor());
}

/**
* Creates a new named vector on a collection.
*
* @param request The create vector name request.
* @return a new instance of {@link ListenableFuture}
*/
public ListenableFuture<UpdateResult> createVectorNameAsync(CreateVectorNameRequest request) {
return createVectorNameAsync(request, null);
}

/**
* Creates a new named vector on a collection.
*
* @param request The create vector name request.
* @param timeout The timeout for the call.
* @return a new instance of {@link ListenableFuture}
*/
public ListenableFuture<UpdateResult> createVectorNameAsync(
CreateVectorNameRequest request, @Nullable Duration timeout) {
logger.debug(
"Create vector name '{}' in '{}'", request.getVectorName(), request.getCollectionName());
ListenableFuture<PointsOperationResponse> future = getPoints(timeout).createVectorName(request);
addLogFailureCallback(future, "Create vector name");
return Futures.transform(
future, PointsOperationResponse::getResult, MoreExecutors.directExecutor());
}

/**
* Deletes a named vector from a collection.
*
* @param request The delete vector name request.
* @return a new instance of {@link ListenableFuture}
*/
public ListenableFuture<UpdateResult> deleteVectorNameAsync(DeleteVectorNameRequest request) {
return deleteVectorNameAsync(request, null);
}

/**
* Deletes a named vector from a collection.
*
* @param request The delete vector name request.
* @param timeout The timeout for the call.
* @return a new instance of {@link ListenableFuture}
*/
public ListenableFuture<UpdateResult> deleteVectorNameAsync(
DeleteVectorNameRequest request, @Nullable Duration timeout) {
logger.debug(
"Delete vector name '{}' in '{}'", request.getVectorName(), request.getCollectionName());
ListenableFuture<PointsOperationResponse> future = getPoints(timeout).deleteVectorName(request);
addLogFailureCallback(future, "Delete vector name");
return Futures.transform(
future, PointsOperationResponse::getResult, MoreExecutors.directExecutor());
}

/**
* Retrieves closest points based on vector similarity and the given filtering conditions.
*
Expand Down
52 changes: 52 additions & 0 deletions src/test/java/io/qdrant/client/CollectionsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
import io.qdrant.client.grpc.Collections.Distance;
import io.qdrant.client.grpc.Collections.VectorParams;
import io.qdrant.client.grpc.Collections.VectorsConfig;
import io.qdrant.client.grpc.Points.CreateVectorNameRequest;
import io.qdrant.client.grpc.Points.DeleteVectorNameRequest;
import io.qdrant.client.grpc.Points.DenseVectorCreationConfig;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ExecutionException;
Expand Down Expand Up @@ -264,4 +267,53 @@ public void deleteAlias() throws ExecutionException, InterruptedException {
List<String> aliases = client.listCollectionAliasesAsync(testName).get();
assertTrue(aliases.isEmpty());
}

@Test
public void createAndDeleteVector() throws ExecutionException, InterruptedException {
CreateCollection createCollection = getCreateCollection(testName);
client.createCollectionAsync(createCollection).get();

client
.createVectorNameAsync(
CreateVectorNameRequest.newBuilder()
.setCollectionName(testName)
.setVectorName("vector_1")
.setDenseConfig(
DenseVectorCreationConfig.newBuilder()
.setSize(8)
.setDistance(Distance.Cosine)
.build())
.setWait(true)
.build())
.get();

assertTrue(
client
.getCollectionInfoAsync(testName)
.get()
.getConfig()
.getParams()
.getVectorsConfig()
.getParamsMap()
.containsMap("vector_1"));

client
.deleteVectorNameAsync(
DeleteVectorNameRequest.newBuilder()
.setCollectionName(testName)
.setVectorName("vector_1")
.setWait(true)
.build())
.get();

assertFalse(
client
.getCollectionInfoAsync(testName)
.get()
.getConfig()
.getParams()
.getVectorsConfig()
.getParamsMap()
.containsMap("vector_1"));
}
}
Loading