diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
index e8478083..1c8b2ace 100644
--- a/.github/workflows/cd.yml
+++ b/.github/workflows/cd.yml
@@ -25,6 +25,9 @@ jobs:
java-version: '17'
distribution: 'temurin'
+ - name: Set Docker API version
+ run: echo "api.version=1.44" > $HOME/.docker-java.properties
+
- name: Build
uses: gradle/gradle-build-action@v2
with:
@@ -70,6 +73,9 @@ jobs:
java-version: '17'
distribution: 'temurin'
+ - name: Set Docker API version
+ run: echo "api.version=1.44" > $HOME/.docker-java.properties
+
- name: Publish package
uses: gradle/gradle-build-action@v2
with:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index ccba4a40..8cd82383 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -27,6 +27,9 @@ jobs:
java-version: '17'
distribution: 'temurin'
+ - name: Set Docker API version
+ run: echo "api.version=1.44" > $HOME/.docker-java.properties
+
- name: Build
uses: gradle/gradle-build-action@v2
with:
diff --git a/README.md b/README.md
index 1d7cfde3..ecf02a6a 100644
--- a/README.md
+++ b/README.md
@@ -38,20 +38,20 @@ To install the library, add the following lines to your build config file.
io.qdrant
client
- 1.16.2
+ 1.17.0
```
#### SBT
```sbt
-libraryDependencies += "io.qdrant" % "client" % "1.16.2"
+libraryDependencies += "io.qdrant" % "client" % "1.17.0"
```
#### Gradle
```gradle
-implementation 'io.qdrant:client:1.16.2'
+implementation 'io.qdrant:client:1.17.0'
```
> [!NOTE]
diff --git a/example/build.gradle b/example/build.gradle
index 94661329..b2754881 100644
--- a/example/build.gradle
+++ b/example/build.gradle
@@ -13,7 +13,7 @@ repositories {
dependencies {
// Qdrant Java client
- implementation 'io.qdrant:client:1.16.2'
+ implementation 'io.qdrant:client:1.17.0'
// gRPC dependencies - use the same version as Qdrant client
implementation 'io.grpc:grpc-netty-shaded:1.65.1'
diff --git a/gradle.properties b/gradle.properties
index a8c3f784..3d3e8ab4 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,8 +1,8 @@
# The version of qdrant to use to download protos
-qdrantProtosVersion=v1.16.2
+qdrantProtosVersion=v1.17.0
# The version of qdrant docker image to run integration tests against
-qdrantVersion=v1.16.2
+qdrantVersion=v1.17.0
# The version of the client to generate
-packageVersion=1.16.2
+packageVersion=1.17.0
diff --git a/src/main/java/io/qdrant/client/QdrantClient.java b/src/main/java/io/qdrant/client/QdrantClient.java
index 717e798f..42edf51a 100644
--- a/src/main/java/io/qdrant/client/QdrantClient.java
+++ b/src/main/java/io/qdrant/client/QdrantClient.java
@@ -32,10 +32,13 @@
import io.qdrant.client.grpc.Collections.ListCollectionAliasesRequest;
import io.qdrant.client.grpc.Collections.ListCollectionsRequest;
import io.qdrant.client.grpc.Collections.ListCollectionsResponse;
+import io.qdrant.client.grpc.Collections.ListShardKeysRequest;
+import io.qdrant.client.grpc.Collections.ListShardKeysResponse;
import io.qdrant.client.grpc.Collections.PayloadIndexParams;
import io.qdrant.client.grpc.Collections.PayloadSchemaType;
import io.qdrant.client.grpc.Collections.RenameAlias;
import io.qdrant.client.grpc.Collections.ShardKey;
+import io.qdrant.client.grpc.Collections.ShardKeyDescription;
import io.qdrant.client.grpc.Collections.UpdateCollection;
import io.qdrant.client.grpc.Collections.UpdateCollectionClusterSetupRequest;
import io.qdrant.client.grpc.Collections.UpdateCollectionClusterSetupResponse;
@@ -926,6 +929,37 @@ public ListenableFuture deleteShardKeyAsync(
MoreExecutors.directExecutor());
}
+ /**
+ * List the shard keys of a collection.
+ *
+ * @param collectionName The name of the collection to list shard keys for.
+ * @return a new instance of {@link ListenableFuture}
+ */
+ public ListenableFuture> listShardKeysAsync(String collectionName) {
+ return listShardKeysAsync(collectionName, null);
+ }
+
+ /**
+ * List the shard keys of a collection.
+ *
+ * @param collectionName The name of the collection to list shard keys for.
+ * @param timeout The timeout for the call.
+ * @return a new instance of {@link ListenableFuture}
+ */
+ public ListenableFuture> listShardKeysAsync(
+ String collectionName, @Nullable Duration timeout) {
+ Preconditions.checkArgument(!collectionName.isEmpty(), "Collection name must not be empty");
+ logger.debug("List shard keys for '{}'", collectionName);
+
+ ListenableFuture future =
+ getCollections(timeout)
+ .listShardKeys(
+ ListShardKeysRequest.newBuilder().setCollectionName(collectionName).build());
+ addLogFailureCallback(future, "List Shard Keys");
+ return Futures.transform(
+ future, response -> response.getShardKeysList(), MoreExecutors.directExecutor());
+ }
+
// endregion
// region Point Management
diff --git a/src/main/java/io/qdrant/client/QueryFactory.java b/src/main/java/io/qdrant/client/QueryFactory.java
index 40a283c0..12d5f0d9 100644
--- a/src/main/java/io/qdrant/client/QueryFactory.java
+++ b/src/main/java/io/qdrant/client/QueryFactory.java
@@ -16,6 +16,7 @@
import io.qdrant.client.grpc.Points.OrderBy;
import io.qdrant.client.grpc.Points.Query;
import io.qdrant.client.grpc.Points.RecommendInput;
+import io.qdrant.client.grpc.Points.RelevanceFeedbackInput;
import io.qdrant.client.grpc.Points.Rrf;
import io.qdrant.client.grpc.Points.Sample;
import io.qdrant.client.grpc.Points.VectorInput;
@@ -253,5 +254,15 @@ public static Query sample(Sample sample) {
return Query.newBuilder().setSample(sample).build();
}
+ /**
+ * Creates a {@link Query} for search with feedback from some oracle.
+ *
+ * @param relevanceFeedback An instance of {@link RelevanceFeedbackInput}
+ * @return A new instance of {@link Query}
+ */
+ public static Query relevanceFeedback(RelevanceFeedbackInput relevanceFeedback) {
+ return Query.newBuilder().setRelevanceFeedback(relevanceFeedback).build();
+ }
+
// endregion
}