Crates.io | instant-distance |
lib.rs | instant-distance |
version | 0.6.1 |
source | src |
created_at | 2021-02-01 12:24:35.468267 |
updated_at | 2023-06-26 07:52:56.73775 |
description | Fast minimal implementation of HNSW maps for approximate nearest neighbors searches |
homepage | https://github.com/InstantDomain/instant-distance |
repository | https://github.com/InstantDomain/instant-distance |
max_upload_size | |
id | 349239 |
size | 56,277 |
Instance Distance is a fast pure-Rust implementation of the Hierarchical Navigable Small Worlds paper by Malkov and Yashunin for finding approximate nearest neighbors. This implementation powers the InstantDomainSearch.com backend services used for word vector indexing.
Instant Distance is an implementation of a fast approximate nearest neighbor search algorithm. The algorithm is used to find the closest point(s) to a given point in a set. As one example, it can be used to make simple translations.
[dependencies]
instant-distance = "0.5.0"
use instant_distance::{Builder, Search};
fn main() {
let points = vec![Point(255, 0, 0), Point(0, 255, 0), Point(0, 0, 255)];
let values = vec!["red", "green", "blue"];
let map = Builder::default().build(points, values);
let mut search = Search::default();
let cambridge_blue = Point(163, 193, 173);
let closest_point = map.search(&cambridge_blue, &mut search).next().unwrap();
println!("{:?}", closest_point.value);
}
#[derive(Clone, Copy, Debug)]
struct Point(isize, isize, isize);
impl instant_distance::Point for Point {
fn distance(&self, other: &Self) -> f32 {
// Euclidean distance metric
(((self.0 - other.0).pow(2) + (self.1 - other.1).pow(2) + (self.2 - other.2).pow(2)) as f32)
.sqrt()
}
}
Rust:
cargo t -p instant-distance --all-features
Python:
make test-python