vector/lib.rs
1//! OpenData Vector Database
2//!
3//! A vector database built on SlateDB with SPANN-style indexing for efficient
4//! approximate nearest neighbor search.
5//!
6//! # Example
7//!
8//! ```
9//! # use vector::{VectorDb, Vector, Config, DistanceMetric};
10//! # use std::time::Duration;
11//! # #[tokio::main]
12//! # async fn main() -> vector::Result<()> {
13//! let config = Config {
14//! dimensions: 384,
15//! distance_metric: DistanceMetric::L2,
16//! flush_interval: Duration::from_secs(60),
17//! ..Default::default()
18//! };
19//! let db = VectorDb::open(config).await?;
20//!
21//! let vectors = vec![
22//! Vector::builder("product-001", vec![0.1; 384])
23//! .attribute("category", "electronics")
24//! .attribute("price", 99i64)
25//! .build(),
26//! ];
27//!
28//! db.write(vectors).await?;
29//! db.flush().await?;
30//! # Ok(())
31//! # }
32//! ```
33
34pub mod db;
35pub mod delta;
36pub mod distance;
37pub(crate) mod error;
38pub mod flusher;
39pub mod hnsw;
40pub(crate) mod lire;
41pub mod model;
42pub(crate) mod query_engine;
43pub mod reader;
44pub mod serde;
45#[cfg(feature = "http-server")]
46pub mod server;
47pub(crate) mod storage;
48pub(crate) mod view_reader;
49
50#[cfg(test)]
51pub(crate) mod test_utils;
52
53// Public API exports
54pub use db::{VectorDb, VectorDbRead};
55pub use error::{Error, Result};
56pub use model::{
57 Attribute, AttributeValue, Config, DistanceMetric, FieldSelection, FieldType, Filter,
58 MetadataFieldSpec, Query, ReaderConfig, SearchResult, Vector, VectorBuilder,
59};
60pub use reader::VectorDbReader;