This is a gRPC server for hnswlib.
It provides more than just the core HNSW model: it is a tool that can be used end-to-end, supporting TLS encryption, multiple persistent indices and batch insertions.
This repository includes the relevant sources from the hnswlib, so it doesn't require any external dependency. For more information please refer to hnswlib and Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs.
A list of API methods now follows:
Method | Description |
---|---|
CreateIndex | Make a new index |
DeleteIndex | Removes an index |
InsertVector | Insert a new vector in the given index, letting the index generate an ID |
InsertVectors | Insert new vectors in the given index, with generated ID, then flush the index |
InsertVectorWithId | Insert a new vector with given ID in the given index |
InsertVectorsWithId | Insert new vectors with given IDs in the given index, then flush the index |
SearchKNN | Return the top k nearest neighbors to the query, searching on the given index |
FlushIndex | Serialize the index to file |
Indices | Return the list of indices |
SetEf | Set the ef parameter for the given index |
You first need to compile the C++ hnswlib
wrapper. Just run the following
script to compile it with g++
:
./pkg/hnswgo/make.sh
Then, download Go dependencies and build the package (with cgo
enabled):
go mod download
CGO_CXXFLAGS="-std=c++11" CGO_ENABLED=1 go build \
-ldflags="-extldflags=-static" \
-o hnsw-grpc-server \
cmd/main.go
You can finally run the executable. For example, you can get help running:
./hnsw-grpc-server -h
The Docker image can be built like this:
docker build -t hnsw-grpc-server:latest .
Pre-built images are available on Docker Hub, at specializedgeneralist/hnsw-grpc-server.
For example, you can pull the image and run the server like this:
docker run -d \
--name hnsw-grpc-server \
-v /path/to/your/data/folder:/hnsw-grpc-server-data
-p 19530:19530 \
specializedgeneralist/hnsw-grpc-server:1.0.0