Skip to main content

KeywordMatcher

Struct KeywordMatcher 

Source
pub struct KeywordMatcher {
    pub name_weight: usize,
    pub type_weight: usize,
    pub desc_weight: usize,
    pub synonyms: HashMap<String, Vec<String>>,
    pub use_tfidf: bool,
    pub synonym_weight: f64,
    pub cjk_bigram_weight: f64,
}
Expand description

Matches entities by keyword substring search.

This is the default matcher used by GraphRAG. It splits the query into keywords and scores each entity based on how many keywords match the entity’s name, type, and description. Name matches are weighted highest.

P2-4: on top of the fixed name+3/type+2/desc+1 weights, three improvements fix the arbitrary weights and the recall gaps of substring matching for synonyms, polysemes, and Chinese-English mixed text:

  • Synonym-table expansion synonyms: when a query term hits a synonym key, the equivalent words are matched too (each hit decayed by synonym_weight, default 0.7).
  • Chinese-English mixed normalization: full-width -> half-width plus splitting long Chinese queries into CJK bigrams, fixing the problem that a space-free Chinese single token cannot hit a short entity name.
  • TF-IDF weighting: each query term is weighted by its inverse document frequency in the entity corpus; common words (e.g. “Technology”) discriminate little and contribute little, while rare words contribute more; use_tfidf can disable it.

Fields§

§name_weight: usize

Weight for name matches (default: 3).

§type_weight: usize

Weight for type matches (default: 2).

§desc_weight: usize

Weight for description matches (default: 1).

§synonyms: HashMap<String, Vec<String>>

Synonym table: query term (normalized lowercase/half-width form) -> list of equivalent words, also in normalized form. When an equivalent word is hit, it is matched once more with the contribution multiplied by synonym_weight.

§use_tfidf: bool

Whether TF-IDF weighting is enabled (default true). When disabled, falls back to the fixed weights.

§synonym_weight: f64

Decay factor for synonym hits (default 0.7).

§cjk_bigram_weight: f64

Decay factor for CJK bigram hits (default 0.5).

Implementations§

Source§

impl KeywordMatcher

Source

pub fn new() -> Self

Creates a new keyword matcher with default weights.

Source

pub fn with_synonyms(self, synonyms: HashMap<String, Vec<String>>) -> Self

Configures the synonym table (query term -> equivalent word list).

Source

pub fn with_tfidf(self, enabled: bool) -> Self

Toggles TF-IDF weighting (enabled by default).

Trait Implementations§

Source§

impl Default for KeywordMatcher

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl EntityMatcher for KeywordMatcher

Source§

fn find_relevant( &self, query: &str, store: &GraphStore, top_k: usize, ) -> Vec<String>

Find entity IDs relevant to the query, returning at most top_k results.

Auto Trait Implementations§

Blanket Implementations§

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<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<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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<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