#nearest-neighbor-search #index #annoy #port #serving #github #api

ru_annoy

A rust implementation of annoy(https://github.com/spotify/annoy) (Index serving only). Providing C api as well

4 releases

0.1.3 Mar 4, 2021
0.1.2 Mar 1, 2021
0.1.1 Feb 27, 2021
0.1.0-dev1 May 9, 2019

#719 in Algorithms

MIT license

57KB
856 lines

RuAnnoy

main appveyor travis MIT License

This library is a rust port of spotify/annoy , currently only index serving is supported.

Install via crates.io

Crates.io codecov

# Cargo.toml
[dependencies]
ru_annoy = "0"

Usage

use ru_annoy::*;

let index = AnnoyIndex::load(10, "index.ann", IndexType::Angular).unwrap();
let v0 = index.get_item_vector(0);
let nearest = index.get_nearest(v0.as_ref(), 5, -1, true);

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

Release

repositories {
  mavenCentral()
  maven { url 'https://jitpack.io' }
}
  
dependencies {
  implementation 'com.github.hanabi1224:RuAnnoy:<tag>'
}

Usage

val index = AnnoyIndex.tryLoad("index.5d.ann", 5, IndexType.Angular)

dotnet

Runtimes Nuget package
RuAnnoy NuGet version
RuAnnoy-Batteries-Windows-x64 NuGet version
RuAnnoy-Batteries-Linux-x64 NuGet version
RuAnnoy-Batteries-Darwin-x64 NuGet version

Install via nuget

  <ItemGroup>
    <PackageReference Include="RuAnnoy" Version="*" />
    <PackageReference Include="RuAnnoy-Batteries-Windows-x64" Version="*" />
  </ItemGroup>

Usage

var index = AnnoyIndex.Load("index.5d.ann", 5, IndexType.Angular);

TODO

  • Index building support
  • CLI tool to build index from file

Dependencies

~2MB
~28K SLoC