Skip to content

Commit 4d493ac

Browse files
authored
fix(full-text-search): fix fuzzy extended to withdraw wrong results (#51)
1 parent 4bbb397 commit 4d493ac

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

packages/full-text-search/spec/generic/search/fuzzy.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ describe("fuzzy query", () => {
132132
});
133133
}
134134
let query = new QB().fuzzy("body", "web").prefixLength(1).fuzziness(1).extended(true).build();
135-
assertMatches(fts, query, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
135+
assertMatches(fts, query, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
136136

137137
query = new QB().match("body", "web").prefixLength(1).fuzziness(1).extended(true).build();
138-
assertMatches(fts, query, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
138+
assertMatches(fts, query, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
139139
});
140140
});

packages/full-text-search/src/index_searcher.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,17 @@ function fuzzySearch(query: ANY, root: InvertedIndex.Index) {
356356
let index = stack.pop();
357357
let treeTerms = treeStack.pop();
358358

359+
// Check if fuzzy should be extended.
360+
if (extended) {
361+
if (treeTerms.length === fuzzy.length) {
362+
extend_fuzzy = levenshteinDistance(fuzzy, treeTerms);
363+
} else {
364+
extend_fuzzy = extend_fuzzy <= fuzziness && treeTerms.length >= fuzzy.length
365+
? extend_fuzzy
366+
: 1e10;
367+
}
368+
}
369+
359370
// Compare tokens if they are in near distance.
360371
if (index.df !== undefined) {
361372
let matched = false;
@@ -378,15 +389,6 @@ function fuzzySearch(query: ANY, root: InvertedIndex.Index) {
378389
}
379390
}
380391

381-
// Check if fuzzy should be extended.
382-
if (extended && treeTerms.length === fuzzy.length) {
383-
extend_fuzzy = levenshteinDistance(fuzzy, treeTerms);
384-
} else {
385-
extend_fuzzy = extended && extend_fuzzy <= fuzziness && treeTerms.length >= fuzzy.length
386-
? extend_fuzzy
387-
: 1e10;
388-
}
389-
390392
// Iterate over all subtrees.
391393
// If token from tree is not longer than maximal distance.
392394
if ((treeTerms.length - fuzzy.length <= fuzziness) || extend_fuzzy <= fuzziness) {

0 commit comments

Comments
 (0)