Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/granne/granne
Graph-based Approximate Nearest Neighbor Search
https://github.com/granne/granne
approximate-nearest-neighbor-search hnsw rust
Last synced: 6 days ago
JSON representation
Graph-based Approximate Nearest Neighbor Search
- Host: GitHub
- URL: https://github.com/granne/granne
- Owner: granne
- License: mit
- Created: 2019-12-06T09:12:47.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-07-08T15:36:08.000Z (4 months ago)
- Last Synced: 2024-10-06T10:18:01.047Z (about 1 month ago)
- Topics: approximate-nearest-neighbor-search, hnsw, rust
- Language: Rust
- Homepage:
- Size: 767 KB
- Stars: 313
- Watchers: 15
- Forks: 25
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-vector-search - Granne - Graph-based retrieval of approximate nearest neighbors witten in rust
README
granne\*
----[![Crates.io](https://img.shields.io/crates/v/granne.svg)](https://crates.io/crates/granne)
[![documentation](https://docs.rs/granne/badge.svg)](https://docs.rs/granne)
[![license](http://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)**granne** (**g**raph-based **r**etrieval of **a**pproximate **n**earest **ne**ighbors) is a Rust library for approximate nearest neighbor search based on [Hierarchical Navigable Small World (HNSW) graphs](https://arxiv.org/abs/1603.09320) and is used in [Cliqz Search](https://beta.cliqz.com). It focuses on reducing memory usage in order to allow [indexing billions of vectors](https://0x65.dev/blog/2019-12-07/indexing-billions-of-text-vectors.html).
## 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](py).
#### 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](https://grokbase.com/t/r/r-sig-mac/106pkkknqd/problems-with-single-precision-routines-in-64-bit-veclib-blas))
with the default `BLAS` library. A workaround is to install e.g. `openblas` and link to that instead.----
\***granne** is Swedish and means **neighbor**