qdrant / go-client

Go client for Qdrant vector search engine
Apache License 2.0
159 stars 15 forks source link

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