pub struct VectorStoreOptions { /* private fields */ }Expand description
Configuration options for opening or creating a vector store.
Follows the std::fs::OpenOptions pattern for familiar, ergonomic API.
§Examples
use omendb::vector::store::VectorStoreOptions;
// Simple persistent store
let store = VectorStoreOptions::default()
.dimensions(384)
.open("./vectors")?;
// With custom HNSW parameters
let store = VectorStoreOptions::default()
.dimensions(384)
.m(32)
.ef_construction(400)
.ef_search(100)
.open("./vectors")?;
// In-memory store
let store = VectorStoreOptions::default()
.dimensions(384)
.build()?;Implementations§
Source§impl VectorStoreOptions
impl VectorStoreOptions
Sourcepub fn dimensions(self, dim: usize) -> Self
pub fn dimensions(self, dim: usize) -> Self
Set vector dimensionality.
If not set, dimensions will be inferred from:
- Existing data when opening a persistent store
- First inserted vector
Sourcepub fn m(self, m: usize) -> Self
pub fn m(self, m: usize) -> Self
Set HNSW M parameter (neighbors per node).
Higher M = better recall, more memory. Range: 4-64, default: 16.
Sourcepub fn ef_construction(self, ef: usize) -> Self
pub fn ef_construction(self, ef: usize) -> Self
Set HNSW ef_construction (build quality).
Higher = better graph quality, slower build. Default: 100.
Sourcepub fn ef_search(self, ef: usize) -> Self
pub fn ef_search(self, ef: usize) -> Self
Set HNSW ef_search (search quality/speed tradeoff).
Higher = better recall, slower search. Default: 100.
Sourcepub fn quantization(self, mode: QuantizationMode) -> Self
pub fn quantization(self, mode: QuantizationMode) -> Self
Enable quantization for memory-efficient storage.
§Modes
QuantizationMode::SQ8: 4x compression, similar speed, ~99% recall (default)QuantizationMode::RaBitQ(params): 8x compression, ~0.5x speed, 93-99% recall
§Example
// SQ8 (recommended for most cases)
let store = VectorStoreOptions::default()
.dimensions(768)
.quantization(QuantizationMode::sq8())
.open("./vectors")?;
// RaBitQ for higher compression
let store = VectorStoreOptions::default()
.dimensions(768)
.quantization(QuantizationMode::rabitq())
.open("./vectors")?;Sourcepub fn quantization_sq8(self) -> Self
pub fn quantization_sq8(self) -> Self
Enable SQ8 quantization (4x compression, similar speed, ~99% recall)
Convenience method for the most common quantization mode.
Sourcepub fn quantization_rabitq(self) -> Self
pub fn quantization_rabitq(self) -> Self
Enable RaBitQ quantization with default 4-bit parameters (8x compression)
Sourcepub fn quantization_rabitq_params(self, params: RaBitQParams) -> Self
pub fn quantization_rabitq_params(self, params: RaBitQParams) -> Self
Enable RaBitQ quantization with custom parameters
Sourcepub fn rescore(self, enable: bool) -> Self
pub fn rescore(self, enable: bool) -> Self
Enable/disable rescoring with original vectors (default: true when quantization enabled).
When rescoring is enabled, search uses quantized vectors for fast candidate selection, then reranks candidates using full-precision vectors for accuracy.
§Arguments
enable- Whether to rescore candidates
Sourcepub fn oversample(self, factor: f32) -> Self
pub fn oversample(self, factor: f32) -> Self
Set oversampling factor for rescoring (default: 3.0).
When rescoring, fetches k * oversample candidates during quantized search,
then returns top k after reranking with full precision.
Higher values improve recall but increase latency.
§Arguments
factor- Oversampling multiplier (must be >= 1.0)
Sourcepub fn metric(self, m: &str) -> Result<Self, String>
pub fn metric(self, m: &str) -> Result<Self, String>
Set distance metric for similarity search.
§Metrics
"l2"or"euclidean": Euclidean distance (default)"cosine": Cosine distance (1 - cosine similarity)"dot"or"ip": Inner product (for MIPS)
§Errors
Returns error if metric string is not recognized.
§Example
let store = VectorStoreOptions::default()
.dimensions(768)
.metric("cosine")?
.open("./vectors")?;Sourcepub fn text_search(self, enabled: bool) -> Self
pub fn text_search(self, enabled: bool) -> Self
Enable tantivy-based full-text search with default configuration.
When enabled, you can use set_with_text() to index text alongside vectors,
and hybrid_search() to search both with RRF fusion.
Uses 50MB writer buffer by default. For custom memory settings,
use text_search_config() instead.
Sourcepub fn text_search_config(self, config: TextSearchConfig) -> Self
pub fn text_search_config(self, config: TextSearchConfig) -> Self
Enable text search with custom configuration.
§Example
// Mobile: lower memory
let store = VectorStoreOptions::default()
.text_search_config(TextSearchConfig { writer_buffer_mb: 15 })
.open("./db")?;
// Cloud: higher throughput
let store = VectorStoreOptions::default()
.text_search_config(TextSearchConfig { writer_buffer_mb: 200 })
.open("./db")?;Sourcepub fn open(&self, path: impl AsRef<Path>) -> Result<VectorStore>
pub fn open(&self, path: impl AsRef<Path>) -> Result<VectorStore>
Open or create a persistent vector store at the given path.
Creates the directory if it doesn’t exist. Loads existing data if the store already exists.
Sourcepub fn build(&self) -> Result<VectorStore>
pub fn build(&self) -> Result<VectorStore>
Build an in-memory vector store (no persistence).
Trait Implementations§
Source§impl Clone for VectorStoreOptions
impl Clone for VectorStoreOptions
Source§fn clone(&self) -> VectorStoreOptions
fn clone(&self) -> VectorStoreOptions
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VectorStoreOptions
impl Debug for VectorStoreOptions
Source§impl Default for VectorStoreOptions
impl Default for VectorStoreOptions
Source§fn default() -> VectorStoreOptions
fn default() -> VectorStoreOptions
Auto Trait Implementations§
impl Freeze for VectorStoreOptions
impl RefUnwindSafe for VectorStoreOptions
impl Send for VectorStoreOptions
impl Sync for VectorStoreOptions
impl Unpin for VectorStoreOptions
impl UnwindSafe for VectorStoreOptions
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more