mod manager;
pub mod builder; pub mod spatial_hybrid;
pub mod text_types;
pub mod text_fts;
pub mod text_encoding;
pub mod text_dictionary;
pub mod tokenizers; pub mod vamana;
pub mod diskann; pub mod btree;
pub mod btree_generic;
pub mod primary_key;
pub mod column_value;
pub mod cached_index;
pub use manager::{IndexManager, IndexType, IndexUpdate};
pub use builder::{IndexBuilder, BuildStats}; pub use spatial_hybrid::{SpatialHybridIndex, SpatialHybridConfig, BoundingBoxF32, MemoryStats};
pub use text_fts::{TextFTSIndex, TextFTSStats};
pub use text_types::{Tokenizer, WhitespaceTokenizer, NgramTokenizer, Token};
pub use text_dictionary::ChunkedDictionary;
pub use btree::{BTree, BTreeConfig, BTreeStats, RangeQueryProfile};
pub use btree_generic::{GenericBTree, GenericBTreeConfig, BTreeKey};
pub use primary_key::PrimaryKeyIndex;
pub use vamana::DiskANNIndex;
pub use column_value::{ColumnValueIndex, ColumnValueIndexConfig, IndexStats as ColumnIndexStats};
pub use cached_index::{CachedIndex, CacheStats};
use crate::types::Value;
use crate::Result;
pub trait Index: Send + Sync {
fn insert(&mut self, row_id: u64, value: &Value) -> Result<()>;
fn batch_insert(&mut self, items: Vec<(u64, Value)>) -> Result<()>;
fn query(&self, predicate: &Predicate) -> Result<Vec<u64>>;
}
#[derive(Debug, Clone)]
pub enum Predicate {
VectorKnn(Vec<f32>, usize),
SpatialRange(f64, f64, f64, f64),
TextSearch(String),
TimestampRange(i64, i64),
}