#[cfg(feature = "native")]
mod tantivy_chirho;
#[cfg(feature = "native")]
mod query_builder_chirho;
#[cfg(feature = "native")]
mod parallel_chirho;
mod regex_chirho;
mod query_parser_chirho;
pub mod highlighter_chirho;
pub mod backend_chirho;
#[cfg(feature = "native")]
pub use tantivy_chirho::TantivySearchChirho;
#[cfg(feature = "native")]
pub use query_builder_chirho::{
TantivyQueryBuilderChirho, SearchBuilderChirho, ScoredResultChirho,
};
#[cfg(feature = "native")]
pub use parallel_chirho::{
ParallelSearchChirho, ParallelSearchConfigChirho, TestamentPartitionChirho,
MultiModuleResultChirho, search_multi_module_parallel_chirho,
};
pub use regex_chirho::{RegexSearchChirho, SearchEntryChirho};
#[cfg(feature = "native")]
pub use query_parser_chirho::{
QueryParserChirho, QueryNodeChirho, SearchScopeChirho, to_tantivy_query_chirho,
};
#[cfg(not(feature = "native"))]
pub use query_parser_chirho::{
QueryParserChirho, QueryNodeChirho, SearchScopeChirho,
};
pub use highlighter_chirho::{
HighlighterChirho, HighlightStyleChirho, HighlightOptionsChirho, HighlightedResultChirho,
};
pub use backend_chirho::{
SearchBackendChirho, SearchResultEntryChirho, SearchQueryOptionsChirho,
RegexSearchBackendChirho, get_default_search_backend_chirho,
};
#[cfg(feature = "native")]
pub use backend_chirho::TantivySearchBackendChirho;
use crate::error_chirho::ResultChirho;
use crate::keys_chirho::ListKeyChirho;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Default)]
pub enum SearchTypeChirho {
RegexChirho,
#[default]
PhraseChirho,
ProximityChirho,
MultiWordChirho,
FuzzyChirho,
EntryAttrChirho,
ExternalChirho,
}
#[derive(Debug, Clone, Default)]
pub struct SearchOptionsChirho {
pub search_type_chirho: Option<SearchTypeChirho>,
pub case_insensitive_chirho: bool,
pub scope_chirho: Option<String>,
pub max_results_chirho: Option<usize>,
pub slop_chirho: Option<u32>,
pub fuzzy_distance_chirho: Option<u8>,
pub include_scores_chirho: bool,
pub min_score_chirho: Option<f32>,
pub highlight_chirho: bool,
}
impl SearchOptionsChirho {
pub fn new_chirho() -> Self {
Self::default()
}
pub fn with_type_chirho(mut self, search_type_chirho: SearchTypeChirho) -> Self {
self.search_type_chirho = Some(search_type_chirho);
self
}
pub fn case_insensitive_chirho(mut self, value_chirho: bool) -> Self {
self.case_insensitive_chirho = value_chirho;
self
}
pub fn with_scope_chirho(mut self, scope_chirho: &str) -> Self {
self.scope_chirho = Some(scope_chirho.to_string());
self
}
pub fn with_max_results_chirho(mut self, max_chirho: usize) -> Self {
self.max_results_chirho = Some(max_chirho);
self
}
pub fn with_slop_chirho(mut self, slop_chirho: u32) -> Self {
self.slop_chirho = Some(slop_chirho);
self
}
pub fn with_fuzzy_chirho(mut self, distance_chirho: u8) -> Self {
self.fuzzy_distance_chirho = Some(distance_chirho.min(2));
self
}
pub fn with_scores_chirho(mut self) -> Self {
self.include_scores_chirho = true;
self
}
pub fn with_min_score_chirho(mut self, score_chirho: f32) -> Self {
self.min_score_chirho = Some(score_chirho);
self
}
pub fn with_highlight_chirho(mut self) -> Self {
self.highlight_chirho = true;
self
}
}
pub trait SearchEngineChirho {
fn search_chirho(
&self,
pattern_chirho: &str,
options_chirho: &SearchOptionsChirho,
) -> ResultChirho<ListKeyChirho>;
fn create_index_chirho(&mut self) -> ResultChirho<()>;
fn has_index_chirho(&self) -> bool;
fn delete_index_chirho(&mut self) -> ResultChirho<()>;
}
#[cfg(test)]
mod tests_chirho {
use super::*;
#[test]
fn test_search_options_default_chirho() {
let options_chirho = SearchOptionsChirho::default();
assert!(options_chirho.search_type_chirho.is_none());
assert!(!options_chirho.case_insensitive_chirho);
}
#[test]
fn test_search_options_builder_chirho() {
let options_chirho = SearchOptionsChirho::new_chirho()
.with_type_chirho(SearchTypeChirho::RegexChirho)
.case_insensitive_chirho(true)
.with_max_results_chirho(100)
.with_scope_chirho("Gen-Exod");
assert_eq!(options_chirho.search_type_chirho, Some(SearchTypeChirho::RegexChirho));
assert!(options_chirho.case_insensitive_chirho);
assert_eq!(options_chirho.max_results_chirho, Some(100));
assert_eq!(options_chirho.scope_chirho, Some("Gen-Exod".to_string()));
}
#[test]
fn test_search_type_default_chirho() {
assert_eq!(SearchTypeChirho::default(), SearchTypeChirho::PhraseChirho);
}
}