pub struct VectorCollection { /* private fields */ }Expand description
A vector collection combining HNSW search, payload storage, and full-text search.
VectorCollection is a typed newtype over Collection that provides
a stable public API for vector workloads. All storage operations delegate
to the single inner: Collection instance — no dual-storage desync.
§Examples
use velesdb_core::{VectorCollection, DistanceMetric, Point, StorageMode};
use serde_json::json;
let coll = VectorCollection::create(
"./data/docs".into(),
"docs",
768,
DistanceMetric::Cosine,
StorageMode::Full,
)?;
coll.upsert(vec![
Point::new(1, vec![0.1; 768], Some(json!({"title": "Hello"}))),
])?;
let results = coll.search(&vec![0.1; 768], 10)?;Implementations§
Source§impl VectorCollection
impl VectorCollection
Sourcepub fn create(
path: PathBuf,
_name: &str,
dimension: usize,
metric: DistanceMetric,
storage_mode: StorageMode,
) -> Result<Self>
pub fn create( path: PathBuf, _name: &str, dimension: usize, metric: DistanceMetric, storage_mode: StorageMode, ) -> Result<Self>
Creates a new VectorCollection at the given path.
§Errors
Returns an error if the directory cannot be created or storage fails.
Sourcepub fn open(path: PathBuf) -> Result<Self>
pub fn open(path: PathBuf) -> Result<Self>
Opens an existing VectorCollection from disk.
§Errors
Returns an error if the config file cannot be read or storage cannot be opened.
Sourcepub fn flush(&self) -> Result<()>
pub fn flush(&self) -> Result<()>
Flushes all engines to disk and saves the config.
§Errors
Returns an error if any flush operation fails.
Sourcepub fn metric(&self) -> DistanceMetric
pub fn metric(&self) -> DistanceMetric
Returns the distance metric.
Sourcepub fn storage_mode(&self) -> StorageMode
pub fn storage_mode(&self) -> StorageMode
Returns the storage mode.
Sourcepub fn config(&self) -> CollectionConfig
pub fn config(&self) -> CollectionConfig
Returns the current collection config.
Sourcepub fn upsert_bulk(&self, points: &[Point]) -> Result<usize>
pub fn upsert_bulk(&self, points: &[Point]) -> Result<usize>
Bulk insert optimized for high-throughput import.
§Errors
Returns an error if any point has a mismatched dimension.
Sourcepub fn search(&self, query: &[f32], k: usize) -> Result<Vec<SearchResult>>
pub fn search(&self, query: &[f32], k: usize) -> Result<Vec<SearchResult>>
Performs kNN vector search.
§Errors
Sourcepub fn text_search(&self, query: &str, k: usize) -> Vec<SearchResult>
pub fn text_search(&self, query: &str, k: usize) -> Vec<SearchResult>
Performs full-text BM25 search.
Sourcepub fn search_with_ef(
&self,
query: &[f32],
k: usize,
ef_search: usize,
) -> Result<Vec<SearchResult>>
pub fn search_with_ef( &self, query: &[f32], k: usize, ef_search: usize, ) -> Result<Vec<SearchResult>>
kNN search with explicit ef_search override.
§Errors
Sourcepub fn search_with_filter(
&self,
query: &[f32],
k: usize,
filter: &Filter,
) -> Result<Vec<SearchResult>>
pub fn search_with_filter( &self, query: &[f32], k: usize, filter: &Filter, ) -> Result<Vec<SearchResult>>
kNN search with metadata filter.
§Errors
Sourcepub fn search_ids(&self, query: &[f32], k: usize) -> Result<Vec<(u64, f32)>>
pub fn search_ids(&self, query: &[f32], k: usize) -> Result<Vec<(u64, f32)>>
Returns (id, score) pairs without payload hydration.
§Errors
Sourcepub fn text_search_with_filter(
&self,
query: &str,
k: usize,
filter: &Filter,
) -> Vec<SearchResult>
pub fn text_search_with_filter( &self, query: &str, k: usize, filter: &Filter, ) -> Vec<SearchResult>
Full-text search with metadata filter.
Sourcepub fn hybrid_search(
&self,
vector: &[f32],
text: &str,
k: usize,
alpha: Option<f32>,
) -> Result<Vec<SearchResult>>
pub fn hybrid_search( &self, vector: &[f32], text: &str, k: usize, alpha: Option<f32>, ) -> Result<Vec<SearchResult>>
Hybrid search (vector + BM25 with RRF fusion).
§Errors
Sourcepub fn hybrid_search_with_filter(
&self,
vector: &[f32],
text: &str,
k: usize,
alpha: Option<f32>,
filter: &Filter,
) -> Result<Vec<SearchResult>>
pub fn hybrid_search_with_filter( &self, vector: &[f32], text: &str, k: usize, alpha: Option<f32>, filter: &Filter, ) -> Result<Vec<SearchResult>>
Hybrid search with metadata filter.
§Errors
Sourcepub fn search_batch_with_filters(
&self,
queries: &[&[f32]],
k: usize,
filters: &[Option<Filter>],
) -> Result<Vec<Vec<SearchResult>>>
pub fn search_batch_with_filters( &self, queries: &[&[f32]], k: usize, filters: &[Option<Filter>], ) -> Result<Vec<Vec<SearchResult>>>
Batch search with per-query filters.
§Errors
Sourcepub fn multi_query_search(
&self,
queries: &[&[f32]],
k: usize,
strategy: FusionStrategy,
filter: Option<&Filter>,
) -> Result<Vec<SearchResult>>
pub fn multi_query_search( &self, queries: &[&[f32]], k: usize, strategy: FusionStrategy, filter: Option<&Filter>, ) -> Result<Vec<SearchResult>>
Multi-query search (multiple vectors fused).
§Errors
Sourcepub fn multi_query_search_ids(
&self,
queries: &[&[f32]],
k: usize,
strategy: FusionStrategy,
) -> Result<Vec<(u64, f32)>>
pub fn multi_query_search_ids( &self, queries: &[&[f32]], k: usize, strategy: FusionStrategy, ) -> Result<Vec<(u64, f32)>>
Multi-query search returning only IDs and fused scores.
§Errors
Sourcepub fn upsert_metadata(
&self,
points: impl IntoIterator<Item = Point>,
) -> Result<()>
pub fn upsert_metadata( &self, points: impl IntoIterator<Item = Point>, ) -> Result<()>
Inserts or updates metadata-only points (no vectors).
§Errors
Sourcepub fn create_index(&self, field: &str) -> Result<()>
pub fn create_index(&self, field: &str) -> Result<()>
Creates a secondary metadata index on a payload field.
§Errors
Sourcepub fn has_secondary_index(&self, field: &str) -> bool
pub fn has_secondary_index(&self, field: &str) -> bool
Returns true if a secondary index exists on field.
Sourcepub fn create_property_index(&self, label: &str, property: &str) -> Result<()>
pub fn create_property_index(&self, label: &str, property: &str) -> Result<()>
Creates a property index for O(1) equality lookups.
§Errors
Sourcepub fn create_range_index(&self, label: &str, property: &str) -> Result<()>
pub fn create_range_index(&self, label: &str, property: &str) -> Result<()>
Creates a range index for O(log n) range queries.
§Errors
Sourcepub fn has_property_index(&self, label: &str, property: &str) -> bool
pub fn has_property_index(&self, label: &str, property: &str) -> bool
Returns true if a property index exists.
Sourcepub fn has_range_index(&self, label: &str, property: &str) -> bool
pub fn has_range_index(&self, label: &str, property: &str) -> bool
Returns true if a range index exists.
Sourcepub fn list_indexes(&self) -> Vec<IndexInfo>
pub fn list_indexes(&self) -> Vec<IndexInfo>
Lists all index definitions on this collection.
Sourcepub fn drop_index(&self, label: &str, property: &str) -> Result<bool>
pub fn drop_index(&self, label: &str, property: &str) -> Result<bool>
Drops an index. Returns true if an index was removed.
§Errors
Sourcepub fn indexes_memory_usage(&self) -> usize
pub fn indexes_memory_usage(&self) -> usize
Returns total memory usage of all indexes in bytes.
Sourcepub fn execute_match(
&self,
match_clause: &MatchClause,
params: &HashMap<String, Value>,
) -> Result<Vec<MatchResult>>
pub fn execute_match( &self, match_clause: &MatchClause, params: &HashMap<String, Value>, ) -> Result<Vec<MatchResult>>
Executes a graph MATCH query.
§Errors
Sourcepub fn execute_match_with_similarity(
&self,
match_clause: &MatchClause,
query_vector: &[f32],
threshold: f32,
params: &HashMap<String, Value>,
) -> Result<Vec<MatchResult>>
pub fn execute_match_with_similarity( &self, match_clause: &MatchClause, query_vector: &[f32], threshold: f32, params: &HashMap<String, Value>, ) -> Result<Vec<MatchResult>>
Executes a MATCH query with vector similarity filtering.
§Errors
Sourcepub fn execute_aggregate(
&self,
query: &Query,
params: &HashMap<String, Value>,
) -> Result<Value>
pub fn execute_aggregate( &self, query: &Query, params: &HashMap<String, Value>, ) -> Result<Value>
Executes an aggregation query (GROUP BY / COUNT / SUM / AVG / MIN / MAX).
§Errors
Sourcepub fn get_stats(&self) -> CollectionStats
pub fn get_stats(&self) -> CollectionStats
Returns CBO statistics.
Sourcepub fn is_metadata_only(&self) -> bool
pub fn is_metadata_only(&self) -> bool
Returns true if the collection is a metadata-only collection.
Sourcepub fn analyze(&self) -> Result<CollectionStats>
pub fn analyze(&self) -> Result<CollectionStats>
Analyzes the collection and returns fresh statistics.
§Errors
Sourcepub fn sparse_search(
&self,
query: &SparseVector,
k: usize,
index_name: &str,
) -> Result<Vec<SearchResult>>
pub fn sparse_search( &self, query: &SparseVector, k: usize, index_name: &str, ) -> Result<Vec<SearchResult>>
Performs sparse-only search on the named index.
§Errors
Returns an error if the named sparse index does not exist.
Sourcepub fn hybrid_sparse_search(
&self,
dense_vector: &[f32],
sparse_query: &SparseVector,
k: usize,
index_name: &str,
strategy: &FusionStrategy,
) -> Result<Vec<SearchResult>>
pub fn hybrid_sparse_search( &self, dense_vector: &[f32], sparse_query: &SparseVector, k: usize, index_name: &str, strategy: &FusionStrategy, ) -> Result<Vec<SearchResult>>
Performs hybrid dense+sparse search with RRF fusion.
§Errors
Returns an error if dense or sparse search fails, or fusion errors.
Sourcepub fn execute_query(
&self,
query: &Query,
params: &HashMap<String, Value>,
) -> Result<Vec<SearchResult>>
pub fn execute_query( &self, query: &Query, params: &HashMap<String, Value>, ) -> Result<Vec<SearchResult>>
Executes a VelesQL query.
§Errors
Sourcepub fn stream_insert(&self, point: Point) -> Result<(), BackpressureError>
pub fn stream_insert(&self, point: Point) -> Result<(), BackpressureError>
Sends a point into the streaming ingestion channel.
Returns Ok(()) on success (202 semantics). Returns
BackpressureError::BufferFull when the channel is at capacity, or
BackpressureError::NotConfigured if streaming is not active.
§Errors
Returns BackpressureError on buffer-full or not-configured.
Sourcepub fn push_to_delta_if_active(&self, entries: &[(u64, Vec<f32>)])
pub fn push_to_delta_if_active(&self, entries: &[(u64, Vec<f32>)])
Pushes (id, vector) entries into the delta buffer if it is active.
No-op when the delta buffer is inactive. This is the public interface
used by streaming upsert handlers (e.g., NDJSON stream endpoint) to
keep the delta buffer in sync after a successful upsert_bulk call.
Sourcepub fn is_delta_active(&self) -> bool
pub fn is_delta_active(&self) -> bool
Returns true if the delta buffer is currently active (HNSW rebuild
in progress). External callers can use this to decide whether to
snapshot entries for delta before a upsert_bulk call.
Sourcepub fn execute_query_str(
&self,
sql: &str,
params: &HashMap<String, Value>,
) -> Result<Vec<SearchResult>>
pub fn execute_query_str( &self, sql: &str, params: &HashMap<String, Value>, ) -> Result<Vec<SearchResult>>
Executes a raw VelesQL string.
§Errors
Trait Implementations§
Source§impl Clone for VectorCollection
impl Clone for VectorCollection
Source§fn clone(&self) -> VectorCollection
fn clone(&self) -> VectorCollection
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for VectorCollection
impl !RefUnwindSafe for VectorCollection
impl Send for VectorCollection
impl Sync for VectorCollection
impl Unpin for VectorCollection
impl UnsafeUnpin for VectorCollection
impl !UnwindSafe for VectorCollection
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> 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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);