Skip to main content

search/
search.rs

1//! Map insertion positions to application IDs and share one corpus between independent workers.
2use hrxdb::{Corpus, Device};
3
4fn main() -> hrxdb::Result<()> {
5    let device = Device::open(0)?;
6    let corpus = Corpus::build(
7        &device,
8        3,
9        [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.8, 0.2, 0.0]],
10    )?;
11    let external_ids = ["document-a", "document-b", "document-c"];
12    let mut index = corpus.searcher()?;
13    drop(device);
14    // The worker and this snapshot share vector allocations.
15    let snapshot = corpus.clone();
16    let worker = std::thread::spawn(move || -> hrxdb::Result<()> {
17        for neighbor in index.search(&[1.0, 0.0, 0.0], 2)? {
18            println!(
19                "{}: {:.6}",
20                external_ids[neighbor.id as usize], neighbor.similarity
21            );
22        }
23        Ok(())
24    });
25    assert_eq!(snapshot.len(), 3);
26    worker.join().expect("query worker panicked")
27}