/go-client

Go client for Qdrant vector search engine

Primary LanguageGoApache License 2.0Apache-2.0

Qdrant-Go

Go client for the Qdrant vector search engine.

Godoc Tests Apache 2.0 License Discord Roadmap 2024

Go client library with handy utilities for interfacing with Qdrant.

📥 Installation

go get -u github.com/qdrant/go-client

📖 Documentation

🔌 Getting started

Creating a client

A client can be instantiated with

import "github.com/qdrant/go-client/qdrant"

client, err := qdrant.NewClient(&qdrant.Config{
  Host: "localhost",
  Port: 6334,
})

Which creates a client that will connect to Qdrant on http://localhost:6334.

Internally, the high-level client uses a low-level gRPC client to interact with Qdrant. qdrant.Config provides additional options to control how the gRPC client is configured. The following example configures API key authentication with TLS:

import "github.com/qdrant/go-client/qdrant"

client, err := qdrant.NewClient(&qdrant.Config{
	Host:   "xyz-example.eu-central.aws.cloud.qdrant.io",
	Port:   6334,
	APIKey: "<paste-your-api-key-here>",
	UseTLS: true,  // uses default config with minimum TLS version set to 1.3
	// TLSConfig: &tls.Config{...},
	// GrpcOptions: []grpc.DialOption{},
})

Working with collections

Once a client has been created, create a new collection

import (
	"context"

	"github.com/qdrant/go-client/qdrant"
)

client.CreateCollection(context.Background(), &qdrant.CreateCollection{
	CollectionName: "{collection_name}",
	VectorsConfig: qdrant.NewVectorsConfig(&qdrant.VectorParams{
		Size:     4,
		Distance: qdrant.Distance_Cosine,
	}),
})

Insert vectors into the collection

operationInfo, err := client.Upsert(context.Background(), &qdrant.UpsertPoints{
	CollectionName: "{collection_name}",
	Points: []*qdrant.PointStruct{
		{
			Id:      qdrant.NewIDNum(1),
			Vectors: qdrant.NewVectors(0.05, 0.61, 0.76, 0.74),
			Payload: qdrant.NewValueMap(map[string]any{"city": "London"}),
		},
		{
			Id:      qdrant.NewIDNum(2),
			Vectors: qdrant.NewVectors(0.19, 0.81, 0.75, 0.11),
			Payload: qdrant.NewValueMap(map[string]any{"age": 32}),
		},
		{
			Id:      qdrant.NewIDNum(3),
			Vectors: qdrant.NewVectors(0.36, 0.55, 0.47, 0.94),
			Payload: qdrant.NewValueMap(map[string]any{"vegan": true}),
		},
	},
})

Search for similar vectors

searchResult, err := client.Query(context.Background(), &qdrant.QueryPoints{
	CollectionName: "{collection_name}",
	Query:          qdrant.NewQuery(0.2, 0.1, 0.9, 0.7),
})

Search for similar vectors with filtering condition

searchResult, err := client.Query(context.Background(), &qdrant.QueryPoints{
	CollectionName: "test_collection",
	Query:          qdrant.NewQuery(0.2, 0.1, 0.9, 0.7),
	Filter: &qdrant.Filter{
		Must: []*qdrant.Condition{
			qdrant.NewMatch("city", "London"),
		},
	},
	WithPayload: qdrant.NewWithPayload(true),
})

⚖️ LICENSE

Apache 2.0 © 2024