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: usizeNumber of results wanted.
budget: CostLargest accepted edit cost (fixed point, 16 = one edit).
tsb: boolUse 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: usizeHard limit on expanded trie nodes.
ranking: RankingHow results are ordered.
Implementations§
Source§impl SearchConfig
impl SearchConfig
Sourcepub fn high_recall() -> Self
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
impl Clone for SearchConfig
Source§fn clone(&self) -> SearchConfig
fn clone(&self) -> SearchConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more