use crate::parser::ast::vector::VectorDistance;
#[cfg(feature = "vector")]
pub use simvec::types::VectorFilter as SpecVectorFilter;
#[cfg(not(feature = "vector"))]
#[derive(Debug, Clone)]
pub struct SpecVectorFilter;
#[derive(Debug, Clone)]
pub enum VectorManageCommand {
Create {
index_name: String,
tag_name: String,
field_name: String,
vector_size: usize,
distance: VectorDistance,
space_id: u64,
hnsw_m: Option<usize>,
hnsw_ef_construct: Option<usize>,
quantization: Option<crate::parser::ast::vector::QuantizationKind>,
quantile: Option<f32>,
compression: Option<crate::parser::ast::vector::CompressionRatioKind>,
always_ram: Option<bool>,
},
Drop {
index_name: String,
if_exists: bool,
space_id: u64,
tag_name: String,
field_name: String,
},
}
#[derive(Debug, Clone)]
pub enum VectorSpec {
VectorManage {
space_name: String,
command: VectorManageCommand,
},
VectorSearch {
space_name: String,
space_id: u64,
index_name: String,
query_vector: Vec<f32>,
query_text: Option<String>,
top_k: u32,
tag_name: String,
field_name: String,
threshold: Option<f32>,
filter: Option<SpecVectorFilter>,
offset: usize,
ryw_config: Option<linkrs_core::types::ReadYourWritesConfig>,
},
VectorLookup {
space_name: String,
space_id: u64,
index_name: String,
query_vector: Vec<f32>,
query_text: Option<String>,
top_k: u32,
tag_name: String,
field_name: String,
ryw_config: Option<linkrs_core::types::ReadYourWritesConfig>,
},
VectorMatch {
space_name: String,
pattern: String,
field: String,
query_vector: Vec<f32>,
query_text: Option<String>,
threshold: Option<f32>,
tag_name: String,
field_name: String,
space_id: u64,
ryw_config: Option<linkrs_core::types::ReadYourWritesConfig>,
},
}
impl VectorSpec {
pub fn ryw_config(&self) -> Option<linkrs_core::types::ReadYourWritesConfig> {
match self {
Self::VectorManage { .. } => None,
Self::VectorSearch { ryw_config, .. }
| Self::VectorLookup { ryw_config, .. }
| Self::VectorMatch { ryw_config, .. } => *ryw_config,
}
}
}