pub struct GraphCollection { /* private fields */ }Expand description
A graph collection storing typed relationships between nodes.
Node embeddings are optional: if dimension is None, no vector index is created.
§Examples
use velesdb_core::{GraphCollection, GraphSchema, GraphEdge, DistanceMetric};
let coll = GraphCollection::create(
"./data/kg".into(),
"knowledge",
None, // no embeddings
DistanceMetric::Cosine, // unused when no embeddings
GraphSchema::schemaless(),
)?;
let edge = GraphEdge::new(1, 100, 200, "KNOWS")?;
coll.add_edge(edge)?;Implementations§
Source§impl GraphCollection
impl GraphCollection
Sourcepub fn diagnostics(&self) -> CollectionDiagnostics
pub fn diagnostics(&self) -> CollectionDiagnostics
Returns diagnostic information about this collection.
Source§impl GraphCollection
impl GraphCollection
Sourcepub fn create(
path: PathBuf,
name: &str,
dimension: Option<usize>,
metric: DistanceMetric,
schema: GraphSchema,
) -> Result<Self>
pub fn create( path: PathBuf, name: &str, dimension: Option<usize>, metric: DistanceMetric, schema: GraphSchema, ) -> Result<Self>
Creates a new GraphCollection.
§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 GraphCollection from disk.
§Errors
Returns an error if config or storage cannot be opened.
Sourcepub fn flush(&self) -> Result<()>
pub fn flush(&self) -> Result<()>
Flushes all state to disk.
Issue #423: This fast-path flush skips vectors.idx serialization.
The WAL provides crash recovery for the vector index.
§Errors
Returns an error if any flush operation fails.
Sourcepub fn flush_full(&self) -> Result<()>
pub fn flush_full(&self) -> Result<()>
Full durability flush including vectors.idx serialization.
Issue #423: Use on graceful shutdown to avoid a full WAL replay on the next startup.
§Errors
Returns an error if any flush operation fails.
Sourcepub fn schema(&self) -> GraphSchema
pub fn schema(&self) -> GraphSchema
Returns the graph schema stored in config.
Returns GraphSchema::schemaless() for collections that have no schema set.
Sourcepub fn has_embeddings(&self) -> bool
pub fn has_embeddings(&self) -> bool
Returns true if this collection stores node embeddings.
Sourcepub fn add_edges_batch(&self, edges: Vec<GraphEdge>) -> usize
pub fn add_edges_batch(&self, edges: Vec<GraphEdge>) -> usize
Adds multiple edges in batch (much faster than calling add_edge in a loop).
Acquires locks once for the entire batch and rebuilds the CSR snapshot once at the end. Duplicate edge IDs are silently skipped.
§Returns
Number of edges successfully added.
Sourcepub fn get_edges(&self, label: Option<&str>) -> Vec<GraphEdge>
pub fn get_edges(&self, label: Option<&str>) -> Vec<GraphEdge>
Returns edges, optionally filtered by label.
Sourcepub fn get_outgoing(&self, node_id: u64) -> Vec<GraphEdge>
pub fn get_outgoing(&self, node_id: u64) -> Vec<GraphEdge>
Returns all outgoing edges from a node.
Sourcepub fn get_incoming(&self, node_id: u64) -> Vec<GraphEdge>
pub fn get_incoming(&self, node_id: u64) -> Vec<GraphEdge>
Returns all incoming edges to a node.
Sourcepub fn edge_count(&self) -> usize
pub fn edge_count(&self) -> usize
Returns the total number of edges in the graph without materializing them.
Sourcepub fn node_degree(&self, node_id: u64) -> (usize, usize)
pub fn node_degree(&self, node_id: u64) -> (usize, usize)
Returns (in_degree, out_degree) for a node.
Sourcepub fn all_node_ids(&self) -> Vec<u64>
pub fn all_node_ids(&self) -> Vec<u64>
Returns the IDs of all nodes that have a stored payload.
Nodes that appear only as edge endpoints without a stored payload
are not included. Use GraphCollection::get_edges to discover
all referenced node IDs.
Sourcepub fn scroll_batch(
&self,
cursor: Option<u64>,
batch_size: usize,
filter: Option<&Filter>,
) -> Result<ScrollBatch>
pub fn scroll_batch( &self, cursor: Option<u64>, batch_size: usize, filter: Option<&Filter>, ) -> Result<ScrollBatch>
Returns the next batch of points for scroll iteration.
Delegates to the inner collection’s scroll_batch (parallel
implementation to VectorCollection::scroll_batch).
§Errors
Returns an error if batch_size is 0.
Sourcepub fn get(&self, ids: &[u64]) -> Vec<Option<Point>>
pub fn get(&self, ids: &[u64]) -> Vec<Option<Point>>
Retrieves nodes by IDs, returning None for missing entries.
Sourcepub fn delete(&self, ids: &[u64]) -> Result<()>
pub fn delete(&self, ids: &[u64]) -> Result<()>
Deletes nodes by IDs.
Missing IDs are silently ignored.
§Errors
Returns an error if storage operations fail.
Sourcepub fn remove_edge(&self, edge_id: u64) -> bool
pub fn remove_edge(&self, edge_id: u64) -> bool
Removes an edge from the graph by ID.
Returns true if the edge existed and was removed, false otherwise.
Sourcepub fn traverse_bfs(
&self,
source_id: u64,
config: &TraversalConfig,
) -> Vec<TraversalResult>
pub fn traverse_bfs( &self, source_id: u64, config: &TraversalConfig, ) -> Vec<TraversalResult>
Performs BFS traversal from a source node.
§Examples
let config = TraversalConfig { max_depth: 3, ..TraversalConfig::default() };
let results = coll.traverse_bfs(100, &config);
for r in &results {
println!("node={} depth={}", r.target_id, r.depth);
}Sourcepub fn traverse_dfs(
&self,
source_id: u64,
config: &TraversalConfig,
) -> Vec<TraversalResult>
pub fn traverse_dfs( &self, source_id: u64, config: &TraversalConfig, ) -> Vec<TraversalResult>
Performs DFS traversal from a source node.
Sourcepub fn traverse_bfs_parallel(
&self,
start_nodes: &[u64],
config: &TraversalConfig,
) -> Vec<TraversalResult>
pub fn traverse_bfs_parallel( &self, start_nodes: &[u64], config: &TraversalConfig, ) -> Vec<TraversalResult>
Performs parallel BFS traversal from multiple start nodes.
When start_nodes exceeds the parallel threshold (100 nodes), rayon
distributes independent per-start-node BFS traversals across CPU cores.
Results are deduplicated by path signature and truncated to config.limit.
§Examples
let config = TraversalConfig { max_depth: 3, ..TraversalConfig::default() };
let results = coll.traverse_bfs_parallel(&[100, 200, 300], &config);
for r in &results {
println!("node={} depth={}", r.target_id, r.depth);
}Sourcepub fn store_node_payload(&self, node_id: u64, payload: &Value) -> Result<()>
👎Deprecated since 1.6.0: Use upsert_node_payload() instead
pub fn store_node_payload(&self, node_id: u64, payload: &Value) -> Result<()>
Use upsert_node_payload() instead
Sourcepub fn search_by_embedding(
&self,
query: &[f32],
k: usize,
) -> Result<Vec<SearchResult>>
pub fn search_by_embedding( &self, query: &[f32], k: usize, ) -> Result<Vec<SearchResult>>
Searches for similar nodes by embedding (only available if has_embeddings()).
§Errors
Returns Error::VectorNotAllowed if this collection has no embeddings,
or Error::DimensionMismatch if the query dimension is wrong.
Sourcepub fn search(&self, query: &[f32], k: usize) -> Result<Vec<SearchResult>>
pub fn search(&self, query: &[f32], k: usize) -> Result<Vec<SearchResult>>
Alias for search_by_embedding.
Provided for API parity with crate::VectorCollection::search.
§Errors
Returns Error::VectorNotAllowed if this collection has no embeddings,
or Error::DimensionMismatch if the query dimension is wrong.
Source§impl GraphCollection
impl GraphCollection
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 parsed VelesQL query.
§Errors
Returns an error if the query is invalid or execution fails.
Sourcepub fn explain_analyze_query(
&self,
query: &Query,
params: &HashMap<String, Value>,
) -> Result<ExplainOutput>
pub fn explain_analyze_query( &self, query: &Query, params: &HashMap<String, Value>, ) -> Result<ExplainOutput>
Executes a query with instrumentation and returns plan + actual stats.
Delegates to crate::Database::explain_analyze_query.
§Errors
Returns an error if the query is invalid or execution fails.
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, parsing it before execution.
§Errors
- Returns an error if the SQL string cannot be parsed.
- Returns an error if query execution fails.
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>>
Sourcepub fn execute_match_with_similarity(
&self,
match_clause: &MatchClause,
query_vector: &[f32],
similarity_threshold: f32,
params: &HashMap<String, Value>,
) -> Result<Vec<MatchResult>>
pub fn execute_match_with_similarity( &self, match_clause: &MatchClause, query_vector: &[f32], similarity_threshold: f32, params: &HashMap<String, Value>, ) -> Result<Vec<MatchResult>>
Executes a MATCH query with vector similarity scoring.
§Errors
Returns an error on dimension mismatch or execution failure.
Trait Implementations§
Source§impl Clone for GraphCollection
impl Clone for GraphCollection
Source§fn clone(&self) -> GraphCollection
fn clone(&self) -> GraphCollection
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for GraphCollection
impl !RefUnwindSafe for GraphCollection
impl Send for GraphCollection
impl Sync for GraphCollection
impl Unpin for GraphCollection
impl UnsafeUnpin for GraphCollection
impl !UnwindSafe for GraphCollection
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>
renamed to 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);