diff options
Diffstat (limited to 'streamingvisitors/src/vespa/vsm/searcher/strchrfieldsearcher.cpp')
-rw-r--r-- | streamingvisitors/src/vespa/vsm/searcher/strchrfieldsearcher.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/streamingvisitors/src/vespa/vsm/searcher/strchrfieldsearcher.cpp b/streamingvisitors/src/vespa/vsm/searcher/strchrfieldsearcher.cpp index c1fa6090021..c0a0249125f 100644 --- a/streamingvisitors/src/vespa/vsm/searcher/strchrfieldsearcher.cpp +++ b/streamingvisitors/src/vespa/vsm/searcher/strchrfieldsearcher.cpp @@ -17,7 +17,7 @@ void StrChrFieldSearcher::prepare(search::streaming::QueryTermList& qtl, void StrChrFieldSearcher::onValue(const document::FieldValue & fv) { - const document::LiteralFieldValueB & sfv = static_cast<const document::LiteralFieldValueB &>(fv); + const auto & sfv = static_cast<const document::LiteralFieldValueB &>(fv); vespalib::stringref val = sfv.getValueRef(); FieldRef fr(val.data(), std::min(maxFieldLength(), val.size())); matchDoc(fr); @@ -25,7 +25,6 @@ void StrChrFieldSearcher::onValue(const document::FieldValue & fv) bool StrChrFieldSearcher::matchDoc(const FieldRef & fieldRef) { - bool retval(true); if (_qtl.size() > 1) { size_t mintsz = shortestTerm(); if (fieldRef.size() >= mintsz) { @@ -35,14 +34,14 @@ bool StrChrFieldSearcher::matchDoc(const FieldRef & fieldRef) } } else { for (auto qt : _qtl) { - if (fieldRef.size() >= qt->termLen()) { + if (fieldRef.size() >= qt->termLen() || qt->isRegex()) { _words += matchTerm(fieldRef, *qt); } else { _words += countWords(fieldRef); } } } - return retval; + return true; } size_t StrChrFieldSearcher::shortestTerm() const @@ -50,6 +49,9 @@ size_t StrChrFieldSearcher::shortestTerm() const size_t mintsz(_qtl.front()->termLen()); for (auto it=_qtl.begin()+1, mt=_qtl.end(); it != mt; it++) { const QueryTerm & qt = **it; + if (qt.isRegex()) { + return 0; // Must avoid "too short query term" optimization when using regex + } mintsz = std::min(mintsz, qt.termLen()); } return mintsz; |