aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorAlexey Chernyshev <aleksei@spotify.com>2022-05-02 14:45:30 +0200
committerAlexey Chernyshev <aleksei@spotify.com>2022-05-04 10:40:35 +0200
commit2aa476818678187d1dcb88ff44e137608b439d50 (patch)
tree7bb19cf6ea39161cae90e7133ff7569a3ec300ab /searchlib
parent7585981b32937d2b13da1a8f94b42c8a0833a4c2 (diff)
Supporting cased match for fuzzy operator
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp b/searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp
index cd233b75438..5df0efe256e 100644
--- a/searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp
@@ -23,14 +23,15 @@ StringSearchHelper::StringSearchHelper(QueryTermUCS4 & term, bool cased)
} else {
_regex = vespalib::Regex::from_pattern(term.getTerm(), vespalib::Regex::Options::IgnoreCase);
}
+ } else if (isFuzzy()) {
+ _fuzzyMatcher = vespalib::FuzzyMatcher(
+ term.getTerm(),
+ term.getFuzzyMaxEditDistance(),
+ term.getFuzzyPrefixLength(),
+ isCased());
} else if (isCased()) {
_term._char = term.getTerm();
_termLen = term.getTermLen();
- } else if (isFuzzy()) {
- _fuzzyMatcher = vespalib::FuzzyMatcher::from_term(
- term.getTerm(),
- term.getFuzzyMaxEditDistance(),
- term.getFuzzyPrefixLength());
} else {
term.term(_term._ucs4);
}
@@ -45,13 +46,13 @@ StringSearchHelper::isMatch(const char *src) const {
if (__builtin_expect(isRegex(), false)) {
return getRegex().valid() ? getRegex().partial_match(std::string_view(src)) : false;
}
+ if (__builtin_expect(isFuzzy(), false)) {
+ return getFuzzyMatcher().isMatch(src);
+ }
if (__builtin_expect(isCased(), false)) {
int res = strncmp(_term._char, src, _termLen);
return (res == 0) && (src[_termLen] == 0 || isPrefix());
}
- if (__builtin_expect(isFuzzy(), false)) {
- return getFuzzyMatcher().isMatch(src);
- }
vespalib::Utf8ReaderForZTS u8reader(src);
uint32_t j = 0;
uint32_t val;