Skip to main content

DocumentRanker

Struct DocumentRanker 

Source
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

Source

pub fn new(config: RankingConfig) -> Self

Creates a new DocumentRanker with the given configuration.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn update_avg_length(&mut self)

Recomputes the average document length across all indexed documents.

Called automatically after each index_document.

Source

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.

Source

pub fn document_count(&self) -> usize

Returns the number of documents currently in the index.

Source

pub fn stats(&self) -> &RankerStats

Returns a reference to the accumulated query statistics.

Source

pub fn avg_doc_length(&self) -> f64

Returns the current average document length used by BM25.

Source

pub fn get_document(&self, doc_id: &str) -> Option<&DocumentIndex>

Returns a reference to a specific indexed document, if present.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more