diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-05-05 08:55:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-05 08:55:06 +0200 |
commit | 7f8c345dc82161b59a579c5786bc8f1cede452cb (patch) | |
tree | badcf99272e707c3456ea3d62a1bdccf660c9f61 /searchlib | |
parent | 1b6aa30113bd77a24c5587426d86adf54112e90b (diff) | |
parent | 768ff9b4a2c4936a381f3cfdc708c582110be3e8 (diff) |
Merge pull request #22432 from alexeyche/alexeyche/fuzzy-cased
Supporting cased match for fuzzy operator
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp | 4 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp | 17 |
2 files changed, 11 insertions, 10 deletions
diff --git a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp index 4deb287df0e..51e95204b2b 100644 --- a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp +++ b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp @@ -388,8 +388,8 @@ testSingleValue(Attribute & svsa, Config &cfg) TEST("testSingleValue") { EXPECT_EQUAL(24u, sizeof(SearchContext)); - EXPECT_EQUAL(88u, sizeof(StringSearchHelper)); - EXPECT_EQUAL(136u, sizeof(attribute::SingleStringEnumSearchContext)); + EXPECT_EQUAL(96u, sizeof(StringSearchHelper)); + EXPECT_EQUAL(144u, sizeof(attribute::SingleStringEnumSearchContext)); { Config cfg(BasicType::STRING, CollectionType::SINGLE); SingleValueStringAttribute svsa("svsa", cfg); 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; |