ruvector_graph/hybrid/
mod.rs

1//! Vector-Graph Hybrid Query System
2//!
3//! Combines vector similarity search with graph traversal for AI workloads.
4//! Supports semantic search, RAG (Retrieval Augmented Generation), and GNN inference.
5
6pub mod cypher_extensions;
7pub mod graph_neural;
8pub mod rag_integration;
9pub mod semantic_search;
10pub mod vector_index;
11
12// Re-export main types
13pub use cypher_extensions::{SimilarityPredicate, VectorCypherExecutor, VectorCypherParser};
14pub use graph_neural::{
15    GnnConfig, GraphEmbedding, GraphNeuralEngine, LinkPrediction, NodeClassification,
16};
17pub use rag_integration::{Context, Evidence, RagConfig, RagEngine, ReasoningPath};
18pub use semantic_search::{ClusterResult, SemanticPath, SemanticSearch, SemanticSearchConfig};
19pub use vector_index::{EmbeddingConfig, HybridIndex, VectorIndexType};
20
21use crate::error::Result;
22use serde::{Deserialize, Serialize};
23
24/// Hybrid query combining graph patterns and vector similarity
25#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct HybridQuery {
27    /// Cypher pattern to match graph structure
28    pub graph_pattern: String,
29    /// Vector similarity constraint
30    pub vector_constraint: Option<VectorConstraint>,
31    /// Maximum results to return
32    pub limit: usize,
33    /// Minimum similarity score threshold
34    pub min_score: f32,
35}
36
37/// Vector similarity constraint for hybrid queries
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct VectorConstraint {
40    /// Query embedding vector
41    pub query_vector: Vec<f32>,
42    /// Property name containing the embedding
43    pub embedding_property: String,
44    /// Top-k similar items
45    pub top_k: usize,
46}
47
48/// Result from a hybrid query
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct HybridResult {
51    /// Matched graph elements
52    pub graph_match: serde_json::Value,
53    /// Similarity score
54    pub score: f32,
55    /// Explanation of match
56    pub explanation: Option<String>,
57}
58
59#[cfg(test)]
60mod tests {
61    use super::*;
62
63    #[test]
64    fn test_hybrid_query_creation() {
65        let query = HybridQuery {
66            graph_pattern: "MATCH (n:Document) RETURN n".to_string(),
67            vector_constraint: None,
68            limit: 10,
69            min_score: 0.8,
70        };
71        assert_eq!(query.limit, 10);
72    }
73}