Thanks to visit codestin.com
Credit goes to github.com

Skip to content

HTTP and gRPC Java Client for qdrant vector database

License

Notifications You must be signed in to change notification settings

metaloom/qdrant-java-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 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

Sponsor this project

 

Packages

No packages published

Languages