pub(in crate::collection::search::query) const MAX_LIMIT: usize = 100_000;
#[derive(Debug, Clone, Default)]
pub(crate) struct QuerySearchOptions {
pub quality: Option<crate::SearchQuality>,
pub ef_search: Option<usize>,
pub force_rerank: Option<bool>,
pub fusion_clause: Option<crate::velesql::FusionClause>,
}
impl QuerySearchOptions {
#[must_use]
pub(crate) fn from_with_clause(with: Option<&crate::velesql::WithClause>) -> Self {
let Some(with) = with else {
return Self::default();
};
let quality = with.get_mode().and_then(parse_mode_to_quality);
let ef_search = with.get_ef_search();
let force_rerank = with.get_rerank();
Self {
quality,
ef_search,
force_rerank,
fusion_clause: None,
}
}
#[must_use]
pub(crate) fn with_fusion(mut self, fusion: Option<crate::velesql::FusionClause>) -> Self {
self.fusion_clause = fusion;
self
}
#[must_use]
pub(crate) fn has_quality_overrides(&self) -> bool {
self.quality.is_some() || self.ef_search.is_some() || self.force_rerank.is_some()
}
}
#[cfg(feature = "persistence")]
fn parse_mode_to_quality(mode: &str) -> Option<crate::SearchQuality> {
crate::api_types::mode_to_search_quality(mode)
}
pub(in crate::collection::search::query) struct ExtractedComponents {
pub(in crate::collection::search::query) vector_search: Option<Vec<f32>>,
pub(in crate::collection::search::query) similarity_conditions:
Vec<(String, Vec<f32>, crate::velesql::CompareOp, f64)>,
pub(in crate::collection::search::query) filter_condition: Option<crate::velesql::Condition>,
pub(in crate::collection::search::query) graph_match_predicates:
Vec<crate::velesql::GraphMatchPredicate>,
pub(in crate::collection::search::query) sparse_vector_search:
Option<crate::velesql::SparseVectorSearch>,
pub(in crate::collection::search::query) is_union_query: bool,
pub(in crate::collection::search::query) is_not_similarity_query: bool,
}
pub(in crate::collection::search::query) struct QueryFinalizationContext<'a> {
pub(in crate::collection::search::query) stmt: &'a crate::velesql::SelectStatement,
pub(in crate::collection::search::query) params:
&'a std::collections::HashMap<String, serde_json::Value>,
pub(in crate::collection::search::query) limit: usize,
pub(in crate::collection::search::query) extracted: &'a ExtractedComponents,
pub(in crate::collection::search::query) ctx: &'a crate::guardrails::QueryContext,
pub(in crate::collection::search::query) let_bindings: &'a [crate::velesql::LetBinding],
}