ruvector_graph/hybrid/
mod.rs1pub mod cypher_extensions;
7pub mod graph_neural;
8pub mod rag_integration;
9pub mod semantic_search;
10pub mod vector_index;
11
12pub 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#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct HybridQuery {
27 pub graph_pattern: String,
29 pub vector_constraint: Option<VectorConstraint>,
31 pub limit: usize,
33 pub min_score: f32,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct VectorConstraint {
40 pub query_vector: Vec<f32>,
42 pub embedding_property: String,
44 pub top_k: usize,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct HybridResult {
51 pub graph_match: serde_json::Value,
53 pub score: f32,
55 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}