Skip to main content

SearchConfig

Struct SearchConfig 

Source
pub struct SearchConfig {
    pub k: usize,
    pub budget: Cost,
    pub tsb: bool,
    pub max_nodes: usize,
    pub ranking: Ranking,
}
Expand description

Search parameters.

Build it with ..SearchConfig::default() so that new fields keep their defaults: k = 10, budget = 32 (two ordinary edits’ worth of cost), tsb = true, max_nodes = 100_000, ranking = Ranking::Coarse.

Fields§

§k: usize

Number of results wanted.

§budget: Cost

Largest accepted edit cost (fixed point, 16 = one edit).

§tsb: bool

Use the subtree-signature lower bound (on by default).

It never changes the results of a search that finishes within max_nodes, only how much work is done; if the node limit stops a search, both modes return a correct prefix of the same ranked list, but its length can differ. In docs/benchmarks/tsb-default.md it expanded about a third fewer trie nodes and lowered p95 latency by about a fifth (one machine, one corpus). The per-node data it reads is built by Trie::build whatever this flag says, so turning it off saves no memory; set tsb: false to compare or to measure the plain bound.

§max_nodes: usize

Hard limit on expanded trie nodes.

§ranking: Ranking

How results are ordered.

Implementations§

Source§

impl SearchConfig

Source

pub fn high_recall() -> Self

An opt-in configuration that trades speed for recall: the default settings with budget = 48 (three ordinary edits’ worth of cost). It sets the subtree bound on explicitly (tsb = true, which does not change the results and is also the default).

On the benchmark in docs/benchmarks/recall-preset.md (300 Birkbeck typo pairs, one machine, median of three runs) it found the right word more often than the default at every dictionary size, at the price of expanding several times more trie nodes per query and a higher latency; the measured numbers are in that file. Measure it on your own dictionary before relying on it. The maximum accepted budget is 64 (see SearchError::BudgetTooLarge); 64 is not offered as a preset because its measured cost grows much faster than its gain.

use keyhammer::search::SearchConfig;
let cfg = SearchConfig { k: 5, ..SearchConfig::high_recall() };
assert_eq!(cfg.budget, 48);
assert!(cfg.tsb);

Trait Implementations§

Source§

impl Clone for SearchConfig

Source§

fn clone(&self) -> SearchConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SearchConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SearchConfig

Source§

fn default() -> Self

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

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.