#[path = "support/flat_index.rs"]
mod flat_index;
use std::sync::Arc;
use flat_index::FlatIndex;
use iqdb_cache::CachedIndex;
use iqdb_index::IndexCore;
use iqdb_types::{DistanceMetric, SearchParams, VectorId};
fn main() {
let mut index = FlatIndex::new(3);
for (id, v) in [
(1u64, [1.0, 0.0, 0.0]),
(2, [0.0, 1.0, 0.0]),
(3, [0.0, 0.0, 1.0]),
] {
index
.insert(VectorId::from(id), Arc::from(&v[..]), None)
.expect("insert");
}
let cached = CachedIndex::new(index);
let params = SearchParams::new(2, DistanceMetric::Euclidean);
let cold = cached.search(&[0.9, 0.1, 0.0], ¶ms).expect("search");
let warm = cached.search(&[0.9, 0.1, 0.0], ¶ms).expect("search");
assert_eq!(cold, warm);
println!(
"nearest two ids: {:?}",
warm.iter().map(|h| &h.id).collect::<Vec<_>>()
);
let stats = cached.cache_stats();
println!(
"hits={} misses={} hit_rate={:.0}%",
stats.hits,
stats.misses,
stats.hit_rate() * 100.0
);
}