pub struct DocumentRanker { /* private fields */ }Expand description
Multi-factor document ranker combining BM25 lexical scoring with semantic similarity.
§Usage
use ipfrs_semantic::document_ranker::{DocumentRanker, RankingConfig, DocumentIndex};
let config = RankingConfig::default();
let mut ranker = DocumentRanker::new(config);
let doc = DocumentIndex::from_tokens("doc1", &["hello", "world"], None);
ranker.index_document(doc);
let results = ranker.rank(&["hello".to_string()], None);
assert!(!results.is_empty());Implementations§
Source§impl DocumentRanker
impl DocumentRanker
Sourcepub fn new(config: RankingConfig) -> Self
pub fn new(config: RankingConfig) -> Self
Creates a new DocumentRanker with the given configuration.
Sourcepub fn index_document(&mut self, doc: DocumentIndex)
pub fn index_document(&mut self, doc: DocumentIndex)
Indexes (or re-indexes) a document.
Inserting a document with the same doc_id as an existing one will
overwrite the previous entry. After insertion the average document
length and IDF cache are refreshed for all terms present in the new
document.
Sourcepub fn rank(
&mut self,
query_terms: &[String],
query_embedding: Option<&[f64]>,
) -> Vec<RankedDocument>
pub fn rank( &mut self, query_terms: &[String], query_embedding: Option<&[f64]>, ) -> Vec<RankedDocument>
Ranks all indexed documents against the given query terms and optional query embedding.
Results are filtered by RankingConfig::min_score, sorted by
descending combined score, and truncated to at most
RankingConfig::max_results entries. Each returned RankedDocument
carries a 1-based rank field.
Sourcepub fn bm25_score(&self, doc: &DocumentIndex, query_terms: &[String]) -> f64
pub fn bm25_score(&self, doc: &DocumentIndex, query_terms: &[String]) -> f64
Computes the BM25 score for a single document given the query terms.
Uses the Robertson–Sparck Jones IDF with BM25+ numerator adjustment.
Sourcepub fn compute_idf(&self, term: &str) -> f64
pub fn compute_idf(&self, term: &str) -> f64
Computes the IDF of a term using Robertson–Sparck Jones smoothed formula:
ln((N - df + 0.5) / (df + 0.5) + 1)where N is the total number of indexed documents and df is the
document frequency of term.
Sourcepub fn cosine_similarity(a: &[f64], b: &[f64]) -> f64
pub fn cosine_similarity(a: &[f64], b: &[f64]) -> f64
Computes the cosine similarity between two embedding vectors.
Returns 0.0 when either vector is zero-length or the lengths differ.
Sourcepub fn update_avg_length(&mut self)
pub fn update_avg_length(&mut self)
Recomputes the average document length across all indexed documents.
Called automatically after each index_document.
Sourcepub fn update_idf_cache(&mut self, terms: &[String])
pub fn update_idf_cache(&mut self, terms: &[String])
Refreshes the IDF cache for the given term list.
Existing cache entries for terms not in terms are preserved.
Sourcepub fn document_count(&self) -> usize
pub fn document_count(&self) -> usize
Returns the number of documents currently in the index.
Sourcepub fn stats(&self) -> &RankerStats
pub fn stats(&self) -> &RankerStats
Returns a reference to the accumulated query statistics.
Sourcepub fn avg_doc_length(&self) -> f64
pub fn avg_doc_length(&self) -> f64
Returns the current average document length used by BM25.
Sourcepub fn get_document(&self, doc_id: &str) -> Option<&DocumentIndex>
pub fn get_document(&self, doc_id: &str) -> Option<&DocumentIndex>
Returns a reference to a specific indexed document, if present.
Auto Trait Implementations§
impl Freeze for DocumentRanker
impl RefUnwindSafe for DocumentRanker
impl Send for DocumentRanker
impl Sync for DocumentRanker
impl Unpin for DocumentRanker
impl UnsafeUnpin for DocumentRanker
impl UnwindSafe for DocumentRanker
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.