granne

Crates.iogranne
lib.rsgranne
version0.5.2
sourcesrc
created_at2019-12-06 10:10:18.774762
updated_at2021-06-06 13:04:32.221136
descriptionGraph-based Retrieval of Approximate Nearest Neighbors
homepage
repositoryhttps://github.com/granne/granne
max_upload_size
id186836
size209,036
(granne)

documentation

https://docs.rs/granne/

README

granne*

Crates.io documentation license

granne (graph-based retrieval of approximate nearest neighbors) is a Rust library for approximate nearest neighbor search based on Hierarchical Navigable Small World (HNSW) graphs and is used in Cliqz Search. It focuses on reducing memory usage in order to allow indexing billions of vectors.

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

You will need to have 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

See Python Bindings.

Optional Requirements

granne can use BLAS (https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) to improve speed of some computations. On Debian/Ubuntu both libblas-dev and libopenblas-dev should work, with the latter being significantly faster.

BLAS can be enabled by passing the blas feature during compilation, e.g.

cargo build --release --features "blas"

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.


*granne is Swedish and means neighbor

Commit count: 203

cargo fmt