use std::collections::HashMap;
use crate::error::EdgestoreError;
use crate::text::facet::FacetFilter;
use crate::text::types::FacetValue;
use crate::types::Lsn;
#[derive(Debug, Clone)]
pub struct TextSearchResult {
pub doc_id: Vec<u8>,
pub score: f32,
}
#[derive(Debug, Clone, Default)]
pub struct SearchOptions {
pub k: usize,
pub facet_filters: Vec<FacetFilter>,
pub typo_tolerance: bool,
}
pub trait TextEngine {
fn index_text(
&mut self,
ns: &[u8],
key: &[u8],
text: &str,
facets: HashMap<String, FacetValue>,
) -> Result<Lsn, EdgestoreError>;
fn search_text(
&self,
ns: &[u8],
query: &str,
k: usize,
) -> Result<Vec<TextSearchResult>, EdgestoreError>;
fn search_text_with_options(
&self,
ns: &[u8],
query: &str,
options: &SearchOptions,
) -> Result<Vec<TextSearchResult>, EdgestoreError>;
fn delete_text(&mut self, ns: &[u8], key: &[u8]) -> Result<Lsn, EdgestoreError>;
}
pub fn text_namespace(ns: &[u8]) -> Vec<u8> {
let mut out = Vec::with_capacity(7 + ns.len());
out.extend_from_slice(b"__text__");
out.extend_from_slice(ns);
out
}