Skip to content
Graph-based Approximate Nearest Neighbor Search
Rust Other
  1. Rust 99.2%
  2. Other 0.8%
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benches
docker/manylinux Bump to version 0.4.0 Aug 6, 2019
example_data Variable number of neighbors + extra neighbors at build time Dec 10, 2018
examples/py Fix python examples after interface change Dec 10, 2019
py Bump to version 0.4.0 Aug 6, 2019
slice_vector
src
.dockerignore QueryEmbeddings, python wheel building, speed up and clean up Sep 6, 2018
.gitignore
Cargo.toml
Dockerfile QueryEmbeddings, python wheel building, speed up and clean up Sep 6, 2018
LICENSE Add LICENSE Jan 13, 2018
README.md Update README.md Jan 23, 2020
build.rs QueryEmbeddings, python wheel building, speed up and clean up Sep 6, 2018
default_settings.toml QueryEmbeddings, python wheel building, speed up and clean up Sep 6, 2018
pyproject.toml Adding pyproject.toml to fix #7 Jan 23, 2020
requirements-linux.txt QueryEmbeddings, python wheel building, speed up and clean up Sep 6, 2018
setup.py

README.md

granne*


granne (graph-based retrieval of approximate nearest neighbors) is a Rust library for ANN-search based on Hierarchical Navigable Small World (HNSW) graphs and is used in Cliqz Search. For some background and motivation behind granne, please read Indexing Billions of Text Vectors.

Note: granne is still under active development. A more stable release (with documentation) is coming soon.

Features

  • Memory-mapped
  • Multithreaded index creation
  • Extensible indexes (add elements to an already built index)
  • Python bindings
  • Dense float or int8 elements (cosine distance)

Installation

Requirements

granne is dependent on BLAS (https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) for some computations. This applies both to the rust and python versions. On Debian/Ubuntu both libblas-dev and libopenblas-dev should work, with the latter being significantly faster.

On Mac OS there seems to be some issue (maybe this one) with the default BLAS library. A workaround is to install e.g. openblas and link to that instead.

You will also need Rust installed. This can be done by calling:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Or by visiting https://rustup.rs/ and following the instructions there.

Rust

# build
cargo build --release

# test
cargo test

# bench
cargo +nightly bench

Python

To quickly install:

pip install setuptools_rust
pip install .

To build python wheels for python 2.7, 3.4, 3.5 and 3.6 (requires docker).

docker build -t granne_manylinux docker/manylinux/
docker run -v $(pwd):/granne/ granne_manylinux /opt/build_wheels.sh

The output is written to wheels/ and can be installed by

pip install granne --no-index -f wheels/

Index Creation

...

Search

...

*granne is Swedish and means neighbor

You can’t perform that action at this time.