Use word_prefix_docids, make get_word_prefix_docids private

This commit is contained in:
Louis Dureuil 2023-04-11 22:06:10 +02:00 committed by Loïc Lecrenier
parent c20c38a7fa
commit 7a01f20df7
5 changed files with 14 additions and 7 deletions

View File

@ -138,7 +138,7 @@ impl<'ctx> SearchContext<'ctx> {
} }
/// Retrieve or insert the given value in the `word_prefix_docids` database. /// Retrieve or insert the given value in the `word_prefix_docids` database.
pub fn get_db_word_prefix_docids( fn get_db_word_prefix_docids(
&mut self, &mut self,
prefix: Interned<String>, prefix: Interned<String>,
) -> Result<Option<RoaringBitmap>> { ) -> Result<Option<RoaringBitmap>> {

View File

@ -434,7 +434,7 @@ fill: \"#B6E2D3\"
writeln!(file, "{}: phrase", p.description(ctx))?; writeln!(file, "{}: phrase", p.description(ctx))?;
} }
if let Some(w) = term_subset.use_prefix_db(ctx) { if let Some(w) = term_subset.use_prefix_db(ctx) {
let w = ctx.word_interner.get(w); let w = ctx.word_interner.get(w.interned());
writeln!(file, "{w}: prefix db")?; writeln!(file, "{w}: prefix db")?;
} }

View File

@ -159,12 +159,12 @@ impl QueryTermSubset {
self.two_typo_subset.intersect(&other.two_typo_subset); self.two_typo_subset.intersect(&other.two_typo_subset);
} }
pub fn use_prefix_db(&self, ctx: &SearchContext) -> Option<Interned<String>> { pub fn use_prefix_db(&self, ctx: &SearchContext) -> Option<Word> {
let original = ctx.term_interner.get(self.original); let original = ctx.term_interner.get(self.original);
let Some(use_prefix_db) = original.zero_typo.use_prefix_db else { let Some(use_prefix_db) = original.zero_typo.use_prefix_db else {
return None return None
}; };
match &self.zero_typo_subset { let word = match &self.zero_typo_subset {
NTypoTermSubset::All => Some(use_prefix_db), NTypoTermSubset::All => Some(use_prefix_db),
NTypoTermSubset::Subset { words, phrases: _ } => { NTypoTermSubset::Subset { words, phrases: _ } => {
// TODO: use a subset of prefix words instead // TODO: use a subset of prefix words instead
@ -175,7 +175,14 @@ impl QueryTermSubset {
} }
} }
NTypoTermSubset::Nothing => None, NTypoTermSubset::Nothing => None,
};
word.map(|word| {
if original.ngram_words.is_some() {
Word::Derived(word)
} else {
Word::Original(word)
} }
})
} }
pub fn all_single_words_except_prefix_db( pub fn all_single_words_except_prefix_db(
&self, &self,

View File

@ -55,7 +55,7 @@ pub fn compute_docids(
compute_prefix_edges( compute_prefix_edges(
ctx, ctx,
left_word.interned(), left_word.interned(),
right_prefix, right_prefix.interned(),
left_phrase, left_phrase,
forward_proximity, forward_proximity,
backward_proximity, backward_proximity,

View File

@ -44,7 +44,7 @@ pub fn compute_query_term_subset_docids(
} }
if let Some(prefix) = term.use_prefix_db(ctx) { if let Some(prefix) = term.use_prefix_db(ctx) {
if let Some(prefix_docids) = ctx.get_db_word_prefix_docids(prefix)? { if let Some(prefix_docids) = ctx.word_prefix_docids(prefix)? {
docids |= prefix_docids; docids |= prefix_docids;
} }
} }