pub struct FtsIndex<B>where
B: FtsBackend,{ /* private fields */ }Expand description
Full-text search index generic over storage backend.
Provides identical indexing, search, and highlighting logic for Origin (redb), Lite (in-memory), and WASM deployments.
Writes accumulate in an in-memory Memtable. When the memtable
exceeds its threshold, it is flushed to an immutable segment
stored via the backend. Queries merge the active memtable with
all persisted segments.
Implementations§
Source§impl<B> FtsIndex<B>where
B: FtsBackend,
impl<B> FtsIndex<B>where
B: FtsBackend,
Source§impl<B> FtsIndex<B>where
B: FtsBackend,
impl<B> FtsIndex<B>where
B: FtsBackend,
Sourcepub fn set_collection_analyzer(
&self,
collection: &str,
analyzer_name: &str,
) -> Result<(), <B as FtsBackend>::Error>
pub fn set_collection_analyzer( &self, collection: &str, analyzer_name: &str, ) -> Result<(), <B as FtsBackend>::Error>
Set the analyzer for a collection. Persists to backend metadata.
Sourcepub fn set_collection_language(
&self,
collection: &str,
lang_code: &str,
) -> Result<(), <B as FtsBackend>::Error>
pub fn set_collection_language( &self, collection: &str, lang_code: &str, ) -> Result<(), <B as FtsBackend>::Error>
Set the language for a collection. Persists to backend metadata.
Sourcepub fn get_collection_analyzer(
&self,
collection: &str,
) -> Result<Option<String>, <B as FtsBackend>::Error>
pub fn get_collection_analyzer( &self, collection: &str, ) -> Result<Option<String>, <B as FtsBackend>::Error>
Get the configured analyzer name for a collection.
Sourcepub fn get_collection_language(
&self,
collection: &str,
) -> Result<Option<String>, <B as FtsBackend>::Error>
pub fn get_collection_language( &self, collection: &str, ) -> Result<Option<String>, <B as FtsBackend>::Error>
Get the configured language for a collection.
Sourcepub fn analyze_for_collection(
&self,
collection: &str,
text: &str,
) -> Result<Vec<String>, <B as FtsBackend>::Error>
pub fn analyze_for_collection( &self, collection: &str, text: &str, ) -> Result<Vec<String>, <B as FtsBackend>::Error>
Analyze text using the collection’s configured analyzer.
Falls back to the standard English analyzer if no analyzer is configured.
Sourcepub fn tokenize_raw_for_collection(
&self,
collection: &str,
text: &str,
) -> Result<Vec<String>, <B as FtsBackend>::Error>
pub fn tokenize_raw_for_collection( &self, collection: &str, text: &str, ) -> Result<Vec<String>, <B as FtsBackend>::Error>
Tokenize text WITHOUT stemming for fuzzy matching.
Returns raw (unstemmed but normalized) tokens so that fuzzy edit distance is computed on original word forms, not stemmed forms.
Source§impl<B> FtsIndex<B>where
B: FtsBackend,
impl<B> FtsIndex<B>where
B: FtsBackend,
Sourcepub fn read_fieldnorm(
&self,
collection: &str,
doc_id: u32,
) -> Result<Option<u32>, <B as FtsBackend>::Error>
pub fn read_fieldnorm( &self, collection: &str, doc_id: u32, ) -> Result<Option<u32>, <B as FtsBackend>::Error>
Get the fieldnorm (SmallFloat-encoded doc length) for a doc.
Returns the decoded approximate u32 length, or None if not stored.
Sourcepub fn write_fieldnorm(
&self,
collection: &str,
doc_id: u32,
doc_length: u32,
) -> Result<(), <B as FtsBackend>::Error>
pub fn write_fieldnorm( &self, collection: &str, doc_id: u32, doc_length: u32, ) -> Result<(), <B as FtsBackend>::Error>
Write a fieldnorm byte for a doc_id. Grows the array if needed.
Source§impl<B> FtsIndex<B>where
B: FtsBackend,
impl<B> FtsIndex<B>where
B: FtsBackend,
Sourcepub fn index_stats(
&self,
collection: &str,
) -> Result<(u32, f32), <B as FtsBackend>::Error>
pub fn index_stats( &self, collection: &str, ) -> Result<(u32, f32), <B as FtsBackend>::Error>
Get total document count and average document length for a collection.
Returns (total_docs, avg_doc_len). If the collection is empty,
returns (0, 1.0) to avoid division by zero.
Source§impl<B> FtsIndex<B>where
B: FtsBackend,
impl<B> FtsIndex<B>where
B: FtsBackend,
Sourcepub fn new(backend: B) -> FtsIndex<B>
pub fn new(backend: B) -> FtsIndex<B>
Create a new FTS index with the given backend and default BM25 params.
Sourcepub fn with_params(backend: B, params: Bm25Params) -> FtsIndex<B>
pub fn with_params(backend: B, params: Bm25Params) -> FtsIndex<B>
Create a new FTS index with custom BM25 parameters.
Sourcepub fn backend_mut(&mut self) -> &mut B
pub fn backend_mut(&mut self) -> &mut B
Mutable access to the underlying backend.
Sourcepub fn load_doc_id_map(
&self,
collection: &str,
) -> Result<DocIdMap, <B as FtsBackend>::Error>
pub fn load_doc_id_map( &self, collection: &str, ) -> Result<DocIdMap, <B as FtsBackend>::Error>
Load the DocIdMap for a collection from backend metadata.
Sourcepub fn index_document(
&self,
collection: &str,
doc_id: &str,
text: &str,
) -> Result<(), <B as FtsBackend>::Error>
pub fn index_document( &self, collection: &str, doc_id: &str, text: &str, ) -> Result<(), <B as FtsBackend>::Error>
Index a document’s text content.
Analyzes text into tokens, writes postings to the LSM memtable,
and flushes to an immutable segment when the threshold is reached.
Sourcepub fn remove_document(
&self,
collection: &str,
doc_id: &str,
) -> Result<(), <B as FtsBackend>::Error>
pub fn remove_document( &self, collection: &str, doc_id: &str, ) -> Result<(), <B as FtsBackend>::Error>
Remove a document from the index.
Tombstones the document in the DocIdMap, removes from the LSM memtable, and decrements backend stats. Segment postings are filtered at query time via the DocIdMap tombstone.
Sourcepub fn purge_collection(
&self,
collection: &str,
) -> Result<usize, <B as FtsBackend>::Error>
pub fn purge_collection( &self, collection: &str, ) -> Result<usize, <B as FtsBackend>::Error>
Purge all entries for a collection. Returns count of removed entries.
Source§impl<B> FtsIndex<B>where
B: FtsBackend,
impl<B> FtsIndex<B>where
B: FtsBackend,
Sourcepub fn search(
&self,
collection: &str,
query: &str,
top_k: usize,
fuzzy_enabled: bool,
) -> Result<Vec<TextSearchResult>, <B as FtsBackend>::Error>
pub fn search( &self, collection: &str, query: &str, top_k: usize, fuzzy_enabled: bool, ) -> Result<Vec<TextSearchResult>, <B as FtsBackend>::Error>
Search the index using BM25 scoring.
Uses AND-first with automatic OR-fallback: if AND yields zero results
for a multi-term query, retries with OR and applies a coverage penalty
of matched_terms / total_terms to each document’s score.
Sourcepub fn search_with_mode(
&self,
collection: &str,
query: &str,
top_k: usize,
fuzzy_enabled: bool,
mode: QueryMode,
) -> Result<Vec<TextSearchResult>, <B as FtsBackend>::Error>
pub fn search_with_mode( &self, collection: &str, query: &str, top_k: usize, fuzzy_enabled: bool, mode: QueryMode, ) -> Result<Vec<TextSearchResult>, <B as FtsBackend>::Error>
Search with explicit boolean mode (AND or OR).
When mode is AND and a multi-term query returns zero results,
automatically falls back to OR with a coverage penalty.
Dispatches to Block-Max WAND (BMW) for OR-mode queries when a DocIdMap is available. Falls back to exhaustive BM25 scoring otherwise.
Auto Trait Implementations§
impl<B> !Freeze for FtsIndex<B>
impl<B> !RefUnwindSafe for FtsIndex<B>
impl<B> Send for FtsIndex<B>where
B: Send,
impl<B> !Sync for FtsIndex<B>
impl<B> Unpin for FtsIndex<B>where
B: Unpin,
impl<B> UnsafeUnpin for FtsIndex<B>where
B: UnsafeUnpin,
impl<B> UnwindSafe for FtsIndex<B>where
B: UnwindSafe,
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.