RuAnnoy
This library is a rust port of spotify/annoy , currently only index serving is supported.
It also provides FFI bindings for jvm, dotnet and dart
Metric | Serve | Build | jvm Binding | dotnet Binding | dart Binding |
---|---|---|---|---|---|
Angular | ✅ | ❌ | ✅ | ✅ | ✅ |
Euclidean | ✅ | ❌ | ✅ | ✅ | ✅ |
Manhattan | ✅ | ❌ | ✅ | ✅ | ✅ |
Dot | ✅ | ❌ | ✅ | ✅ | ✅ |
Hamming | ❌ | ❌ | ❌ | ❌ | ❌ |
Install via crates.io
# Cargo.toml
[]
= "0"
Usage
use *;
let index = load.unwrap;
let v0 = index.get_item_vector;
let nearest = index.get_nearest;
FFI support
kotlin/java
It uses JNI bindings to rust crate and is ~5-10x faster than pure java implementation in benchmark scenario
Install via jitpack.io
repositories
dependencies
Usage
val index = AnnoyIndex.tryLoad("index.5d.ann", 5, IndexType.Angular)
dotnet
Runtimes | Nuget package |
---|---|
RuAnnoy | |
RuAnnoy-Batteries-Windows-x64 | |
RuAnnoy-Batteries-Linux-x64 | |
RuAnnoy-Batteries-Darwin-x64 |
Install via nuget
Usage
var index = AnnoyIndex.Load("index.5d.ann", 5, IndexType.Angular);
dart
Install via pub.dev
# pubspec.yaml
dependencies:
dart_native_annoy: ^0.1.0
Usage
import 'dart:ffi';
import 'package:dart_native_annoy/annoy.dart';
/// Creat factory from DynamicLibrary
final fac = AnnoyIndexFactory(lib: DynamicLibrary.open('libannoy_rs.so'));
/// Load index
final index = indexFactory.loadIndex(
'index.euclidean.5d.ann', 5, IndexType.Euclidean)!;
print('size: ${index.size}');
final v3 = index.getItemVector(3);
final nearest = index.getNearest(v0, 5, includeDistance: true);
TODO
- Index building support
- CLI tool to build index from file