Skip to main content

ringdb/
lib.rs

1//! # ringDB
2//!
3//! A vector database specialised for **ring queries** in high-dimensional spaces.
4//!
5//! Instead of nearest-neighbour search, ringDB retrieves all vectors whose
6//! Euclidean distance to a query lies within a specified interval `[d-λ, d+λ]`.
7//!
8//! ## Quick start
9//!
10//! ```
11//! use ringdb::{RingDb, RingDbConfig, RingQuery};
12//!
13//! let mut db = RingDb::new(RingDbConfig::new(4)).unwrap();
14//! db.add_vector(&[1.0f32, 0.0, 0.0, 0.0], ()).unwrap();
15//! db.add_vector(&[0.0, 5.0, 0.0, 0.0], ()).unwrap();
16//!
17//! let db = db.build().unwrap();
18//! let result = db.query(&RingQuery { query: &[0.0f32; 4], d: 1.0, lambda: 0.1 }).unwrap();
19//! // result.hits contains all matching vectors with their squared distances
20//! ```
21mod backend;
22mod config;
23mod engine;
24mod error;
25pub mod payload;
26mod persist;
27mod query;
28
29pub use config::{BackendPreference, RingDbConfig};
30pub use engine::{RingDb, SealedRingDb};
31pub use error::RingDbError;
32pub use payload::{OwnedPayloadStore, Payload, RefPayloadStore};
33pub use query::{DiskIntersectionQuery, DiskQuery, Hit, QueryResult, RangeQuery, RingQuery};
34
35// Re-export the derive macro so users write `use ringdb::Payload` for both
36// the trait and the derive, mirroring the serde pattern.
37pub use ring_db_derive::Payload;
38
39/// Private implementation details referenced by the `#[derive(Payload)]`
40/// generated code. Not part of the public API; subject to change.
41#[doc(hidden)]
42pub mod __private {
43    pub use crate::error::Result;
44    pub use crate::payload::pod::{PodStore, PodStoreBuilder};
45    pub use crate::payload::serde::{SerdeStore, SerdeStoreBuilder};
46}