hora-search/hora
hora-search/hora has 2,656 GitHub stars and 77 forks. GitHot measured 0 stars in 24 hours and -1 in 7 days. Last checked 2026-11-08 08:39 UTC. Last push 2026-02-17.
🚀 efficient approximate nearest neighbor search algorithm collections library written in Rust 🦀 .
できること
- SIMD-Accelerated (packed_simd)
- Stable algorithm implementation
- Multiple threads design
- Can also be used as a service
計測したスター増加
- 24時間
- 0
- 7日間
- -1
- 15日間
- 更新が遅れています
- 1か月
- 更新が遅れています
期間ごとの純増数です。期間は重複しており、日別の値ではありません。未計測の値は空欄です。スター数は注目度の指標であり、品質の保証ではありません。
README_JP.md
オリジナルHora
[Homepage] [Document] [Examples]
Hora Search Everywhere!
Horaは近似最近傍探索アルゴリズムライブラリ [Wikipedia]です。 信頼性、高レベルの抽象化、および C++に匹敵する高速性を達成するために、すべてのコードをRust🦀で実装しています。
日本語で「ほら」は、[hōlə]のように聞こえます。この名前は、日本の歌「小さな恋のうた」の有名な歌詞「ほら あなたにとって大事な人ほど すぐそばにいるの」にちなんで付けられました。
デモ
👩 Face-Match [online demo]
🍷 Dream wine comments search [online demo]
特徴
性能 ⚡️
- SIMD アクセラレーション (packed_simd)
- 安定したアルゴリズムの実装
- マルチスレッドデザイン
複数のプログラミング言語をサポート ☄️
PythonJavascriptJavaGo(WIP)Ruby(WIP)Swift(WIP)R(WIP)Julia(WIP)- サービスとしても使用可能
複数のインデックスをサポート 🚀
移植性 💼
WebAssembly対応Windows、LinuxおよびOS Xに対応iOSおよびAndroid対応 (WIP)no_std対応 (WIP, partial)BLASなどの大きな依存関係はありません
信頼性 🔒
Rustコンパイラはすべてのコードを保護しますPythonなどの全ての言語向けのライブラリでRustによるメモリ管理- 幅広いテスト範囲
複数の距離をサポート 🧮
Dot Product DistanceEuclidean DistanceManhattan DistanceCosine Similarity
生産性 ⭐
- 整備されたドキュメント
- エレガントかつシンプル、そして習得しやすいAPI
インストール
Cargo.tomlで
[dependencies]
hora = "0.1.1"
Python
$ pip install horapy
Javascript (WebAssembly)
$ npm i horajs
ソースコードからビルド
$ git clone https://github.com/hora-search/hora
$ cargo build
ベンチマーク

by aws t2.medium (CPU: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz) more information
Examples
Rust [詳細]
use hora::core::ann_index::ANNIndex;
use rand::{thread_rng, Rng};
use rand_distr::{Distribution, Normal};
pub fn demo() {
let n = 1000;
let dimension = 64;
// make sample points
let mut samples = Vec::with_capacity(n);
let normal = Normal::new(0.0, 10.0).unwrap();
for _i in 0..n {
let mut sample = Vec::with_capacity(dimension);
for _j in 0..dimension {
sample.push(normal.sample(&mut rand::thread_rng()));
}
samples.push(sample);
}
// init index
let mut index = hora::index::hnsw_idx::HNSWIndex::<f32, usize>::new(
dimension,
&hora::index::hnsw_params::HNSWParams::<f32>::default(),
);
for (i, sample) in samples.iter().enumerate().take(n) {
// add point
index.add(sample, i).unwrap();
}
index.build(hora::core::metrics::Metric::Euclidean).unwrap();
let mut rng = thread_rng();
let target: usize = rng.gen_range(0..n);
// 523 has neighbors: [523, 762, 364, 268, 561, 231, 380, 817, 331, 246]
println!(
"{:?} has neighbors: {:?}",
target,
index.search(&samples[target], 10) // search for k nearest neighbors
);
}
この完全な純粋な錆画像検索のコード例を公開して下さった@vaaaaanquish様に感謝申し上げます。この例の詳細については、Pure Rustな近似最近傍探索ライブラリhoraを用いた画像検索を実装するをご覧ください。
Python [詳細]
import numpy as np
from horapy import HNSWIndex
dimension = 50
n = 1000
# init index instance
index = HNSWIndex(dimension, "usize")
samples = np.float32(np.random.rand(n, dimension))
for i in range(0, len(samples)):
# add node
index.add(np.float32(samples[i]), i)
index.build("euclidean") # build index
target = np.random.randint(0, n)
# 410 in Hora ANNIndex <HNSWIndexUsize> (dimension: 50, dtype: usize, max_item: 1000000, n_neigh: 32, n_neigh0: 64, ef_build: 20, ef_search: 500, has_deletion: False)
# has neighbors: [410, 736, 65, 36, 631, 83, 111, 254, 990, 161]
print("{} in {} \nhas neighbors: {}".format(
target, index, index.search(samples[target], 10))) # search
JavaScript [詳細]
import * as horajs from "horajs";
const demo = () => {
const dimension = 50;
var bf_idx = horajs.BruteForceIndexUsize.new(dimension);
// var hnsw_idx = horajs.HNSWIndexUsize.new(dimension, 1000000, 32, 64, 20, 500, 16, false);
for (var i = 0; i < 1000; i++) {
var feature = [];
for (var j = 0; j < dimension; j++) {
feature.push(Math.random());
}
bf_idx.add(feature, i); // add point
}
bf_idx.build("euclidean"); // build index
var feature = [];
for (var j = 0; j < dimension; j++) {
feature.push(Math.random());
}
console.log("bf result", bf_idx.search(feature, 10)); //bf result Uint32Array(10) [704, 113, 358, 835, 408, 379, 117, 414, 808, 826]
}
(async () => {
await horajs.default();
await horajs.init_env();
demo();
})();
Java [詳細]
public void demo() {
final int dimension = 2;
final float variance = 2.0f;
Random fRandom = new Random();
BruteForceIndex bruteforce_idx = new BruteForceIndex(dimension); // init index instance
List<float[]> tmp = new ArrayList<>();
for (int i = 0; i < 5; i++) {
for (int p = 0; p < 10; p++) {
float[] features = new float[dimension];
for (int j = 0; j < dimension; j++) {
features[j] = getGaussian(fRandom, (float) (i * 10), variance);
}
bruteforce_idx.add("bf", features, i * 10 + p); // add point
tmp.add(features);
}
}
bruteforce_idx.build("bf", "euclidean"); // build index
int search_index = fRandom.nextInt(tmp.size());
// nearest neighbor search
int[] result = bruteforce_idx.search("bf", 10, tmp.get(search_index));
// [main] INFO com.hora.app.ANNIndexTest - demo bruteforce_idx[7, 8, 0, 5, 3, 9, 1, 6, 4, 2]
log.info("demo bruteforce_idx" + Arrays.toString(result));
}
private static float getGaussian(Random fRandom, float aMean, float variance) {
float r = (float) fRandom.nextGaussian();
return aMean + r * variance;
}
ロードマップ
- 完全なテストカバレッジ
- EFANNAアルゴリズムを実装して、より高速なKNNグラフ構築を実現する
- SwiftのサポートとiOS/macOSのデプロイ例
-
Rのサポート -
mmapのサポート
関連プロジェクトと比較
-
- Hora の実装は、これらのライブラリに強く影響を受けています。
FaissはGPUの使用に重点を置いており、HoraはFaissよりも軽量です (大きな依存関係はありません)。Horaはより多くの言語をサポートすることを期待しており、パフォーマンスに関連する部分は全てRustで実装しています🦀AnnoyはLSH(Random Projection)アルゴリズムのみをサポートします。ScaNとFatsはドキュメントなどの面においてユーザーフレンドリーではありません- Hora is ALL IN RUST 🦀 (Horaは全てRustで実装しています🦀)
-
MilvusとValdも複数の言語をサポートしていますが、ライブラリではなくサービスとして機能しますMilvusはFaissなどのいくつかのライブラリにの上に成り立っていますが、Horaではすべてのアルゴリズムが実装されています。
貢献に参加する
We appreciate your participation!
皆様のご参加をお待ちしております。ドキュメントやテストなど、あらゆる貢献を歓迎します。 GitHub でPull RequestsまたはIssuesを作成できます。できるだけ早く確認します。
提案やバグを管理するためにGitHubのIssuesを使用します。
リポジトリのclone
git clone https://github.com/hora-search/hora
ビルド
cargo build
テスト
cargo test --lib
変更の確認
cd examples
cargo run
ライセンス
このリポジトリはApache Licenseでライセンスされています。
関連プロジェクトを探す
tensorflow/tensorflow
すべての人のためのオープンソース機械学習フレームワーク
201,400 スターhuggingface/transformers
🤗 Transformers:テキスト、ビジョン、音声、マルチモーダルの最先端機械学習モデル向けモデル定義フレームワークで、推論と学習の両方に対応します。
168,668 スターAUTOMATIC1111/stable-diffusion-webui
Stable Diffusion の Web UI
165,261 スターComfy-Org/ComfyUI
グラフとノードによるインターフェースを備えた、最も強力でモジュール性の高い拡散モデル向け GUI、API、バックエンド。世界最速のローカル推論エンジン。
145,835 スター