Awesome
<div align="center"> <img src="asset/logo.svg" width="70%"/> </div>hora-wasm
[Homepage] [Document] [Examples] [Hora]
Javascript bidding for the Hora Approximate Nearest Neighbor Search
, in WebAssembly way.
Features
-
Performant ⚡️
- SIMD-Accelerated (packed_simd)
- Stable algorithm implementation
- Multiple threads design
-
Multiple Indexes Support 🚀
-
Reliability 🔒
Rust
compiler secure all code- Memory managed by
Rust
for all language libs such asPython lib
- Broad testing coverage
-
Multiple Distances Support 🧮
Dot Product Distance
Euclidean Distance
Manhattan Distance
Cosine Similarity
-
Productive ⭐
- Well documented
- Elegant and simple API, easy to learn
Benchmark
<img src="asset/fashion-mnist-784-euclidean_10_euclidean.png"/>by aws t2.medium (CPU: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz)
more information
Installation
npm i horajs
Example
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();
})();
License
The entire repo is under Apache License.