1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//! BM25 full-text scoring and search.
//!
//! Implements the Okapi BM25 ranking algorithm with:
//! - [`tokenizer::Tokenizer`] — text → token stream (lowercase, alphanumeric,
//! length filtering, stop words, optional suffix stemming)
//! - [`scorer::Scorer`] — pure BM25 mathematics (k1 / b parameters)
//! - [`adapters::MemoryBm25Adapter`] — full in-process inverted index
//! - `adapters::PostgresBm25Adapter` — Postgres-backed (stubbed)
//!
//! # Quick start
//!
//! ```rust,no_run
//! use fornix::bm25::{Bm25Config, Bm25Adapter, adapter::{IndexDocument, SearchOptions}};
//! use fornix::bm25::adapters::MemoryBm25Adapter;
//!
//! # tokio_test::block_on(async {
//! let adapter = MemoryBm25Adapter::connect(Bm25Config::default()).await.unwrap();
//!
//! adapter.index(IndexDocument::new("doc-1", "Rust is a systems programming language"), None).await.unwrap();
//! adapter.index(IndexDocument::new("doc-2", "Python is great for scripting"), None).await.unwrap();
//!
//! let results = adapter.search("rust systems", None, SearchOptions::default()).await.unwrap();
//! assert_eq!(results[0].id, "doc-1");
//! # });
//! ```
pub use ;
pub use Bm25Config;
pub use ;
pub use Bm25Result;
pub use Scorer;
pub use Tokenizer;