summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-05-05 08:55:06 +0200
committerGitHub <noreply@github.com>2022-05-05 08:55:06 +0200
commit7f8c345dc82161b59a579c5786bc8f1cede452cb (patch)
treebadcf99272e707c3456ea3d62a1bdccf660c9f61 /searchlib
parent1b6aa30113bd77a24c5587426d86adf54112e90b (diff)
parent768ff9b4a2c4936a381f3cfdc708c582110be3e8 (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.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/string_search_helper.cpp17
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;