#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)]
pub enum BoolMode {
And,
#[default]
Or,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)]
pub enum Bm25Stats {
#[default]
PerSuperfile,
Global,
}
impl From<&str> for Bm25Stats {
fn from(s: &str) -> Self {
match s.to_ascii_lowercase().as_str() {
"global" => Bm25Stats::Global,
_ => Bm25Stats::PerSuperfile,
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Default)]
pub struct Bm25SearchOptions {
pub mode: BoolMode,
pub stats: Bm25Stats,
}
impl Bm25SearchOptions {
pub fn new() -> Self {
Self::default()
}
pub fn with_mode(mut self, mode: BoolMode) -> Self {
self.mode = mode;
self
}
pub fn with_stats(mut self, stats: Bm25Stats) -> Self {
self.stats = stats;
self
}
}
impl From<&str> for BoolMode {
fn from(s: &str) -> Self {
match s {
"and" => BoolMode::And,
"or" => BoolMode::Or,
_ => BoolMode::Or,
}
}
}