https://github.com/djc/instant-distance
Fast approximate nearest neighbor searching in Rust, based on HNSW index
https://github.com/djc/instant-distance
approximate-nearest-neighbor-search hnsw rust
Last synced: 4 days ago
JSON representation
Fast approximate nearest neighbor searching in Rust, based on HNSW index
- Host: GitHub
- URL: https://github.com/djc/instant-distance
- Owner: djc
- License: apache-2.0
- Created: 2020-12-14T15:15:27.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-11-24T07:52:19.000Z (22 days ago)
- Last Synced: 2025-12-06T00:37:46.946Z (10 days ago)
- Topics: approximate-nearest-neighbor-search, hnsw, rust
- Language: Rust
- Homepage:
- Size: 220 KB
- Stars: 337
- Watchers: 5
- Forks: 30
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README

# Instant Distance: fast HNSW indexing
[](https://github.com/InstantDomain/instant-distance/actions?query=workflow%3ACI)
[](LICENSE-MIT)
[](LICENSE-APACHE)
Instance Distance is a fast pure-Rust implementation of the [Hierarchical
Navigable Small Worlds paper][paper] by Malkov and Yashunin for finding
approximate nearest neighbors. This implementation powers the
[Instant Domain Search][domains] backend services used for word vector indexing.
## What it does
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][translations].
## Using the library
### Rust
```toml
[dependencies]
instant-distance = "0.5.0"
```
## Example
```rust
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()
}
}
```
## Testing
Rust:
```
cargo t -p instant-distance --all-features
```
Python:
```
make test-python
```
[paper]: https://arxiv.org/abs/1603.09320
[domains]: https://instantdomainsearch.com/
[translations]: https://instantdomains.com/engineering/how-to-use-fasttext-for-instant-translations