-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic.rs
More file actions
46 lines (38 loc) · 1.33 KB
/
Copy pathbasic.rs
File metadata and controls
46 lines (38 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Copyright 2026 James Gober. Licensed under Apache-2.0 OR MIT.
//! The smallest useful program: open, write, read, search, delete.
//!
//! Run with `cargo run --example basic`.
use iqdb::{DistanceMetric, Iqdb, Result, Vector, VectorId};
fn main() -> Result<()> {
// A 3-dimensional, in-memory database compared under cosine distance.
let db = Iqdb::open_in_memory(3, DistanceMetric::Cosine)?;
db.upsert(
VectorId::from(1u64),
Vector::new(vec![1.0, 0.0, 0.0])?,
None,
)?;
db.upsert(
VectorId::from(2u64),
Vector::new(vec![0.0, 1.0, 0.0])?,
None,
)?;
db.upsert(
VectorId::from(3u64),
Vector::new(vec![0.9, 0.1, 0.0])?,
None,
)?;
println!("stored {} vectors", db.len());
// Look one up by id.
if let Some((vector, _meta)) = db.get(&VectorId::from(3u64))? {
println!("record 3 = {:?}", vector.as_slice());
}
// Nearest two to a query pointing along the first axis.
let query = Vector::new(vec![1.0, 0.0, 0.0])?;
for hit in db.search(&query, 2)? {
println!("hit id={} distance={:.4}", hit.id, hit.distance);
}
// Idempotent delete: the boolean says whether anything was removed.
println!("deleted 2? {}", db.delete(&VectorId::from(2u64))?);
println!("remaining: {}", db.len());
db.close()
}