### 11 unstable releases

0.6.1 | Jun 26, 2023 |
---|---|

0.6.0 | Aug 1, 2022 |

0.5.1 | Mar 28, 2022 |

0.5.0 | May 20, 2021 |

0.1.3 | Feb 17, 2021 |

#**177** in Algorithms

**1,091** downloads per month

Used in **2** crates

**MIT/Apache**

37KB

826 lines

# Instant Distance: fast HNSW indexing

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.

## 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.

## Using the library

### Rust

`[``dependencies``]`
`instant-distance ``=` `"`0.5.0`"`

## Example

`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`

#### Dependencies

~2–12MB

~103K SLoC