Skip to content

chisomekweani/qdrant-java-client

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Qdrant Java Client

This project contains a java client for the Qdrant vector database. The client supports HTTP and gRPC transport in either blocking or non-blocking fashion. For async operation a Future or RxJava3 based API can be used.


testing SonarCloud Vulnerabilities Code Coverage License Latest release Quality Gate Status

Maven

<dependency>
	<groupId>io.metaloom.qdrant</groupId>
	<artifactId>qdrant-java-grpc-client</artifactId>
	<version>0.13.0</version>
</dependency>

or for the HTTP client

<dependency>
	<groupId>io.metaloom.qdrant</groupId>
	<artifactId>qdrant-java-http-client</artifactId>
	<version>0.13.0</version>
</dependency>

NOTE: The http client currently (as of v1.2.0 of Qdrant) supports more methods compared to the gRPC client.

Notes / Status

This client was build and tested for Qdrant server version v1.2.0. Minimum required JRE is current LTS version 17.

Usage - gRPC

int port = qdrant.grpcPort(); // Default: 6334
String host = qdrant.getHost();

try (QDrantGRPCClient client = QDrantGRPCClient.builder()
	.setHostname(host)
	.setPort(port)
	.build()) {

	// Define the collection to store vectors
	VectorParams params = VectorParams.newBuilder()
		.setSize(4)
		.setDistance(Distance.Euclid)
		.build();

	// Add the params to a map
	VectorParamsMap paramsMap = VectorParamsMap.newBuilder()
		.putMap("firstVector", params)
		.putMap("secondVector", params)
		.build();

	// Create new collections - blocking
	client.createCollection("test1", paramsMap).sync();
	// .. or via Future API
	client.createCollection("test2", params).async().get();
	// .. or via RxJava API
	client.createCollection("test3", params).rx().blockingGet();

	// Insert a new vectors
	for (int i = 0; i < 10; i++) {

		// Vector of the point
		float[] vector = new float[] { 0.43f + i, 0.1f, 0.61f, 1.45f - i };

		// Payload of the point
		Map<String, Value> payload = new HashMap<>();
		payload.put("color", ModelHelper.value("blue"));

		// Now construct the point
		PointStruct point = ModelHelper.namedPoint(42L + i, "firstVector", vector, payload);
		// .. and insert it
		client.upsertPoint("test1", point, true).sync();
	}

	// Count points
	long nPoints = client.countPoints("test1", null, true).sync().getResult().getCount();

	// Now run KNN search
	float[] searchVector = new float[] { 0.43f, 0.09f, 0.41f, 1.35f };
	List<ScoredPoint> searchResults = client.searchPoints("test1", "firstVector", searchVector, 2, null).sync().getResultList();
	for (ScoredPoint result : searchResults) {
		System.out.println("Found: [" + result.getId().getNum() + "] " + result.getScore());
	}

	// Invoke backup via Snapshot API
	client.createSnapshot("test1").sync();
}

Usage - HTTP

int port = qdrant.httpPort();
String host = qdrant.getHost();

try (QDrantHttpClient client = QDrantHttpClient.builder()
	.setHostname(host)
	.setPort(port)
	.build()) {

	// Create a collection
	CollectionCreateRequest req = new CollectionCreateRequest();
	req.setVectors("colors", 4, Distance.EUCLID);
	client.createCollection("the-collection-name", req).sync();

	// Now add some points
	PointStruct p1 = PointStruct.of("colors", 0.42f, 0.33f, 42.15f, 68.72f)
		.setPayload("{\"name\": \"first\"}")
		.setId(1);
	PointStruct p2 = PointStruct.of("colors", 0.76f, 0.43f, 63.45f, 22.10f)
		.setPayload("{ \"color\": \"red\"}")
		.setId(2);
	PointStruct p3 = PointStruct.of("colors", 0.41f, 0.32f, 42.11f, 68.71f).setId(3);
	PointStruct p4 = PointStruct.of("colors", 0.12f, 0.23f, 12.46f, 47.17f).setId(4);

	PointsListUpsertRequest pointsRequest = new PointsListUpsertRequest();
	pointsRequest.setPoints(p1, p2, p3, p4);
	client.upsertPoints("the-collection-name", pointsRequest, false).async().blockingGet();

	// List the collections
	client.listCollections().async().blockingGet();

	// Count the points in the collection
	client.countPoints("the-collection-name", new PointCountRequest().setExact(true)).sync();
}

Release Process

# Bump qdrant.version in pom.xml and QDrantContainer#DEFAULT_VERSION

# Update maven version to next release
mvn versions:set -DgenerateBackupPoms=false

# Now run tests locally or via GitHub actions
mvn clean package

# Deploy to maven central and auto-close staging repo. 
# Adding the property will trigger the profiles in the parent pom to include gpg,javadoc...
mvn clean deploy -Drelease

About

HTTP and gRPC Java Client for qdrant vector database

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%