1pub mod adaptive;
46pub mod cache;
47pub mod colbert;
48pub mod distributed;
49pub mod embeddings;
50pub mod filter;
51pub mod gpu;
52pub mod hnsw;
53pub mod hybrid;
54pub mod ivf;
55pub mod lsh;
56pub mod metrics;
57pub mod multi_index;
58pub mod optimizer;
59pub mod otel;
60pub mod persistence;
61pub mod profiling;
62pub mod quantization;
63pub mod recall_eval;
64pub mod search;
65pub mod simd;
66pub mod types;
67
68pub use adaptive::{AdaptiveConfig, AdaptiveIndex, AdaptiveStats};
70pub use cache::{CacheConfig, CacheStats, QueryCache};
71pub use colbert::{ColbertConfig, ColbertIndex, ColbertSearchResult, ColbertStats, MultiVectorDoc};
72pub use distributed::{ConsistentHash, DistributedIndex, DistributedStats, ShardConfig};
73pub use embeddings::{
74 CachedEmbeddingProvider, EmbeddingCache, EmbeddingProvider, MockEmbeddingProvider,
75 OpenAIConfig, OpenAIEmbeddingProvider,
76};
77pub use filter::{Filter, FilterCondition, FilterValue, Metadata};
78pub use gpu::{GpuBatchProcessor, GpuConfig, GpuStats};
79pub use hnsw::{HnswConfig, HnswIndex, HnswStats};
80pub use hybrid::{HybridConfig, HybridIndex, HybridSearchResult, HybridStats};
81pub use ivf::{IvfPqConfig, IvfPqIndex, IvfPqStats};
82pub use lsh::{LshConfig, LshIndex, LshStats};
83pub use metrics::{IndexStats as MetricsIndexStats, LatencyTimer, Metrics, SearchStats};
84pub use multi_index::{MultiIndexConfig, MultiIndexSearch, ScoreMergeStrategy};
85pub use optimizer::{OptimizerConfig, QueryOptimizer, QueryPlan, SearchStrategy};
86pub use otel::{init_tracing, shutdown_tracing, TracingConfig};
87pub use profiling::{
88 Bottleneck, ImpactLevel, IndexHealthChecker, ProfilingConfig, QueryProfile, QueryProfiler,
89 Recommendation,
90};
91pub use quantization::{
92 BinaryQuantizationConfig, BinaryQuantizedIndex, BinaryQuantizedIndexStats, BinaryQuantizer,
93 FourBitQuantizedIndex, FourBitQuantizedIndexStats, FourBitQuantizer, QuantizationConfig,
94 QuantizedIndexStats, QuantizedVectorIndex, ScalarQuantizer,
95};
96pub use recall_eval::{AggregatedMetrics, EvaluationConfig, QueryMetrics, RecallEvaluator};
97pub use search::VectorSearchIndex;
98pub use types::{DistanceMetric, IndexStats, SearchConfig, SearchResult};
99
100#[cfg(test)]
101mod tests {
102 use super::*;
103 use std::collections::HashMap;
104
105 #[test]
106 fn test_basic_search() {
107 let mut embeddings = HashMap::new();
108 embeddings.insert("doc1".to_string(), vec![1.0, 0.0, 0.0]);
109 embeddings.insert("doc2".to_string(), vec![0.0, 1.0, 0.0]);
110
111 let config = SearchConfig::default();
112 let mut index = VectorSearchIndex::new(config);
113 assert!(index.build(&embeddings).is_ok());
114
115 let query = vec![0.9, 0.1, 0.0];
116 let results = index.search(&query, 1).unwrap();
117
118 assert_eq!(results.len(), 1);
119 assert_eq!(results[0].entity_id, "doc1");
120 }
121}