diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-12-07 14:36:53 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-12-07 14:36:53 +0100 |
commit | 6fdfffbd6c8e205c67906cc5f7a5df9002be4a27 (patch) | |
tree | 69e9b2cee095783c86c7766674529b37057f4576 /searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp | |
parent | 10a580357998b4c750729f27d3ef2e224dd69af7 (diff) |
Add MultiTerm and InTerm for streaming search.
Diffstat (limited to 'searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp')
-rw-r--r-- | searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp b/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp new file mode 100644 index 00000000000..ad5857b8c41 --- /dev/null +++ b/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp @@ -0,0 +1,66 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "multi_term.h" +#include <vespa/searchlib/query/tree/term_vector.h> + +using search::fef::ITermData; +using search::fef::MatchData; +using search::query::TermVector; + +namespace search::streaming { + +MultiTerm::MultiTerm(std::unique_ptr<QueryNodeResultBase> result_base, const string & index, Type type, uint32_t num_terms) + : QueryTerm(std::move(result_base), "", index, type), + _terms() +{ + _terms.reserve(num_terms); +} + +MultiTerm::MultiTerm(std::unique_ptr<QueryNodeResultBase> result_base, const string & index, Type type, std::unique_ptr<TermVector> terms) + : MultiTerm(std::move(result_base), index, type, terms->size()) +{ + auto num_terms = terms->size(); + for (uint32_t i = 0; i < num_terms; ++i) { + add_term(std::make_unique<QueryTerm>(std::unique_ptr<QueryNodeResultBase>(), terms->getAsString(i).first, "", QueryTermSimple::Type::WORD)); + } +} + +MultiTerm::~MultiTerm() = default; + +void +MultiTerm::add_term(std::unique_ptr<QueryTerm> term) +{ + _terms.emplace_back(std::move(term)); +} + +MultiTerm* +MultiTerm::as_multi_term() noexcept +{ + return this; +} + +void +MultiTerm::reset() +{ + for (auto& term : _terms) { + term->reset(); + } +} + +bool +MultiTerm::evaluate() const +{ + for (const auto& term : _terms) { + if (term->evaluate()) return true; + } + return false; +} + +const HitList& +MultiTerm::evaluateHits(HitList& hl) const +{ + hl.clear(); + return hl; +} + +} |