aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-12-07 14:36:53 +0100
committerTor Egge <Tor.Egge@online.no>2023-12-07 14:36:53 +0100
commit6fdfffbd6c8e205c67906cc5f7a5df9002be4a27 (patch)
tree69e9b2cee095783c86c7766674529b37057f4576 /searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
parent10a580357998b4c750729f27d3ef2e224dd69af7 (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.cpp66
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;
+}
+
+}