mod common;
use std::sync::Arc;
use common::Flat;
use iqdb_build::build;
use iqdb_index::IndexCore;
use iqdb_types::{DistanceMetric, SearchParams, VectorId};
fn main() -> iqdb_types::Result<()> {
let vectors = [
(1u64, [0.0_f32, 0.0, 0.0]),
(2, [1.0, 0.0, 0.0]),
(3, [0.0, 1.0, 0.0]),
(4, [0.9, 0.1, 0.0]),
];
let items = vectors
.iter()
.map(|(id, v)| (VectorId::from(*id), Arc::from(v.as_slice()), None));
let index: Flat = build(3, DistanceMetric::Euclidean, items)?;
println!("built an index with {} vectors", index.len());
let hits = index.search(
&[0.95, 0.05, 0.0],
&SearchParams::new(2, DistanceMetric::Euclidean),
)?;
println!("nearest two to [0.95, 0.05, 0.0]:");
for hit in &hits {
println!(" id={:?} distance={:.4}", hit.id, hit.distance);
}
Ok(())
}