diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-01-01 16:36:17 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-01-01 16:36:17 +0000 |
commit | 008d81c1f2aee5498472f0aab1c20724c1b7f9b2 (patch) | |
tree | 20da6b151b24021af0baf49be83b8737ca9715f1 /searchlib/src/vespa/searchlib/query/streaming/querynode.cpp | |
parent | 89e594cd35cc7c86f0aa7178896727f3982793bf (diff) |
Code modernization and minor rewrite to avoid hard to read negations.
Diffstat (limited to 'searchlib/src/vespa/searchlib/query/streaming/querynode.cpp')
-rw-r--r-- | searchlib/src/vespa/searchlib/query/streaming/querynode.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp index db0fbd5b98e..6b3aa7a2fd0 100644 --- a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp +++ b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp @@ -13,12 +13,18 @@ LOG_SETUP(".vsm.querynode"); namespace search::streaming { namespace { - vespalib::stringref DEFAULT("default"); - bool disableRewrite(const QueryNode * qn) { - return dynamic_cast<const NearQueryNode *> (qn) || - dynamic_cast<const PhraseQueryNode *> (qn) || - dynamic_cast<const SameElementQueryNode *>(qn); - } + +vespalib::stringref DEFAULT("default"); +bool disableRewrite(const QueryNode * qn) { + return dynamic_cast<const NearQueryNode *> (qn) || + dynamic_cast<const PhraseQueryNode *> (qn) || + dynamic_cast<const SameElementQueryNode *>(qn); +} + +bool possibleFloat(const QueryTerm & qt, const QueryTerm::string & term) { + return !qt.encoding().isBase10Integer() && qt.encoding().isFloat() && (term.find('.') != QueryTerm::string::npos); +} + } QueryNode::UP @@ -43,8 +49,8 @@ QueryNode::Build(const QueryNode * parent, const QueryNodeResultFactory & factor { qn = QueryConnector::create(type); if (qn) { - QueryConnector * qc = dynamic_cast<QueryConnector *> (qn.get()); - NearQueryNode * nqn = dynamic_cast<NearQueryNode *> (qc); + auto * qc = dynamic_cast<QueryConnector *> (qn.get()); + auto * nqn = dynamic_cast<NearQueryNode *> (qc); if (nqn) { nqn->distance(queryRep.getNearDistance()); } @@ -150,21 +156,17 @@ QueryNode::Build(const QueryNode * parent, const QueryNodeResultFactory & factor qt->setFuzzyMaxEditDistance(queryRep.getFuzzyMaxEditDistance()); qt->setFuzzyPrefixLength(queryRep.getFuzzyPrefixLength()); } - if (qt->encoding().isBase10Integer() || - ! qt->encoding().isFloat() || - ! factory.getRewriteFloatTerms() || - ! allowRewrite || - (ssTerm.find('.') == vespalib::string::npos)) - { - qn = std::move(qt); - } else { + if (possibleFloat(*qt, ssTerm) && factory.getRewriteFloatTerms() && allowRewrite) { auto phrase = std::make_unique<PhraseQueryNode>(); - phrase->addChild(std::make_unique<QueryTerm>(factory.create(), ssTerm.substr(0, ssTerm.find('.')), ssIndex, TermType::WORD)); - phrase->addChild(std::make_unique<QueryTerm>(factory.create(), ssTerm.substr(ssTerm.find('.') + 1), ssIndex, TermType::WORD)); + auto dotPos = ssTerm.find('.'); + phrase->addChild(std::make_unique<QueryTerm>(factory.create(), ssTerm.substr(0, dotPos), ssIndex, TermType::WORD)); + phrase->addChild(std::make_unique<QueryTerm>(factory.create(), ssTerm.substr(dotPos + 1), ssIndex, TermType::WORD)); auto orqn = std::make_unique<EquivQueryNode>(); orqn->addChild(std::move(qt)); orqn->addChild(std::move(phrase)); qn = std::move(orqn); + } else { + qn = std::move(qt); } } } |