diff options
author | Alexey Chernyshev <aleksei@spotify.com> | 2022-05-02 14:45:30 +0200 |
---|---|---|
committer | Alexey Chernyshev <aleksei@spotify.com> | 2022-05-04 10:40:35 +0200 |
commit | 2aa476818678187d1dcb88ff44e137608b439d50 (patch) | |
tree | 7bb19cf6ea39161cae90e7133ff7569a3ec300ab /searchlib | |
parent | 7585981b32937d2b13da1a8f94b42c8a0833a4c2 (diff) |
Supporting cased match for fuzzy operator
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp | 17 |
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; |