17 releases (7 breaking)

0.8.0 May 18, 2024
0.7.1 Dec 9, 2023
0.7.0 Nov 22, 2023
0.4.5 Sep 4, 2022
0.2.0 May 27, 2020

#103 in Science

45 downloads per month

Apache-2.0

2.5MB
16K SLoC

C++ 12K SLoC // 0.0% comments Rust 3K SLoC // 0.0% comments Python 513 SLoC // 0.2% comments Shell 15 SLoC

ngt-rs

crate doc

Rust wrappers for NGT, which provides high-speed approximate nearest neighbor searches against a large volume of data in high dimensional vector data space (several ten to several thousand dimensions). The vector data can be f32, u8, or f16.

This crate provides the following indexes:

  • NgtIndex: Graph and tree based index[^1]
  • QgIndex: Quantized graph based index[^2]
  • QbgIndex: Quantized blob graph based index

Both quantized indexes are available through the quantized Cargo feature. Note that they rely on BLAS and LAPACK which thus have to be installed locally. Furthermore, QgIndex performances can be improved by using the qg_optim Cargo feature.

The NgtIndex default implementation is an ANNG. It can be optimized[^3] or converted to an ONNG through the optim module.

By default ngt-rs will be built dynamically, which requires CMake to build NGT. This means that you'll have to make the build artifact libngt.so available to your final binary (see an example in the CI). However the static feature will build and link NGT statically. Note that OpenMP will also be linked statically. If the quantized feature is used, then BLAS and LAPACK libraries will also be linked statically.

NGT's shared memory and large dataset features are available through the Cargo features shared_mem and large_data respectively.

[^1]: Graph and tree based method explanation

[^2]: Quantized graph based method explanation

[^3]: NGT index optimizations in Python

Dependencies