#最近邻 #最近邻搜索 #近似 #分层 #可导航

即时距离

近似最近邻搜索的 HNSW 映射的快速最小实现

11 个不稳定版本

0.6.1 2023 年 6 月 26 日
0.6.0 2022 年 8 月 1 日
0.5.1 2022 年 3 月 28 日
0.5.0 2021 年 5 月 20 日
0.1.3 2021 年 2 月 17 日

#275算法

Download history 295/week @ 2024-04-22 365/week @ 2024-04-29 314/week @ 2024-05-06 422/week @ 2024-05-13 309/week @ 2024-05-20 139/week @ 2024-05-27 190/week @ 2024-06-03 95/week @ 2024-06-10 203/week @ 2024-06-17 105/week @ 2024-06-24 185/week @ 2024-07-01 245/week @ 2024-07-08 192/week @ 2024-07-15 74/week @ 2024-07-22 146/week @ 2024-07-29 174/week @ 2024-08-05

每月 636 次下载
用于 2 crates

MIT/Apache

37KB
826

Cover logo

即时距离:快速 HNSW 索引

Build status License: MIT License: Apache 2.0

即时距离是 Malkov 和 Yashunin 的分层可导航小世界论文的快速纯 Rust 实现,用于查找近似最近邻。此实现为InstantDomainSearch.com后端服务提供动力,用于单词向量索引。

它做什么

即时距离是一种快速近似最近邻搜索算法的实现。该算法用于在集合中查找与给定点最近的点。例如,它可以用于实现简单翻译

使用库

Rust

[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

依赖关系

~2–10MB
~92K SLoC