summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-03-18 17:24:35 +0100
committerTor Egge <Tor.Egge@online.no>2024-03-18 17:24:35 +0100
commitb700eeb73d8de490cdafbc3d004ed091e71e3c9e (patch)
tree62c710558ace31723020bf73e48d917a9d95ec3f /searchlib
parent4b5012817431e6cb91a2d19235ffa768cf6cf88f (diff)
Use multi_index_terms() returning boolean to differentiate between
multi term nodes that all searches the same index (e.g. Phrase) and multi term nodes that searches multiple indexes (e.g. Equiv, SameElement).
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.h2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp18
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/multi_term.h7
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp12
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/queryterm.h2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.h2
8 files changed, 39 insertions, 16 deletions
diff --git a/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.cpp b/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.cpp
index 4367dc1cd69..8878c8c5cdc 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.cpp
@@ -81,10 +81,10 @@ EquivQueryNode::unpack_match_data(uint32_t docid, const fef::ITermData& td, fef:
unpack_match_data_helper(docid, td, match_data, hit_list, *this, is_filter(), index_env);
}
-const MultiTerm*
-EquivQueryNode::as_multi_index_multi_term() const noexcept
+bool
+EquivQueryNode::multi_index_terms() const noexcept
{
- return this;
+ return true;
}
const EquivQueryNode*
diff --git a/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.h b/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.h
index ac87e14150b..997a861ee44 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/equiv_query_node.h
@@ -17,7 +17,7 @@ public:
bool evaluate() const override;
const HitList & evaluateHits(HitList & hl) const override;
void unpack_match_data(uint32_t docid, const fef::ITermData& td, fef::MatchData& match_data, const fef::IIndexEnvironment& index_env) override;
- const MultiTerm* as_multi_index_multi_term() const noexcept override;
+ bool multi_index_terms() const noexcept override;
const EquivQueryNode* as_equiv_query_node() const noexcept override;
std::vector<std::unique_ptr<QueryTerm>> steal_terms();
};
diff --git a/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp b/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
index f5a09892551..2a96a967215 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
@@ -51,4 +51,22 @@ MultiTerm::evaluate() const
return false;
}
+MultiTerm*
+MultiTerm::as_multi_term() noexcept
+{
+ return this;
+}
+
+const MultiTerm*
+MultiTerm::as_multi_term() const noexcept
+{
+ return this;
+}
+
+bool
+MultiTerm::multi_index_terms() const noexcept
+{
+ return false;
+}
+
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/multi_term.h b/searchlib/src/vespa/searchlib/query/streaming/multi_term.h
index 9bf5f8de6b2..a2ae3d30d52 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/multi_term.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/multi_term.h
@@ -29,7 +29,12 @@ public:
std::unique_ptr<query::TermVector> terms, Normalizing normalizing);
~MultiTerm() override;
void add_term(std::unique_ptr<QueryTerm> term);
- MultiTerm* as_multi_term() noexcept override { return this; }
+ MultiTerm* as_multi_term() noexcept override;
+ const MultiTerm* as_multi_term() const noexcept override;
+ /*
+ * Terms below search in different indexes when multi_index_terms() returns true.
+ */
+ virtual bool multi_index_terms() const noexcept;
void reset() override;
bool evaluate() const override;
const std::vector<std::unique_ptr<QueryTerm>>& get_terms() const noexcept { return _terms; }
diff --git a/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp b/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp
index 8a1fe2004d0..07fc60d2243 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp
@@ -135,20 +135,20 @@ QueryTerm::as_multi_term() noexcept
return nullptr;
}
-RegexpTerm*
-QueryTerm::as_regexp_term() noexcept
+const MultiTerm*
+QueryTerm::as_multi_term() const noexcept
{
return nullptr;
}
-FuzzyTerm*
-QueryTerm::as_fuzzy_term() noexcept
+RegexpTerm*
+QueryTerm::as_regexp_term() noexcept
{
return nullptr;
}
-const MultiTerm*
-QueryTerm::as_multi_index_multi_term() const noexcept
+FuzzyTerm*
+QueryTerm::as_fuzzy_term() noexcept
{
return nullptr;
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/queryterm.h b/searchlib/src/vespa/searchlib/query/streaming/queryterm.h
index 4a108d880e9..78b0a1fea7d 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/queryterm.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/queryterm.h
@@ -104,9 +104,9 @@ public:
void setFuzzyPrefixLength(uint32_t fuzzyPrefixLength) { _fuzzyPrefixLength = fuzzyPrefixLength; }
virtual NearestNeighborQueryNode* as_nearest_neighbor_query_node() noexcept;
virtual MultiTerm* as_multi_term() noexcept;
+ virtual const MultiTerm* as_multi_term() const noexcept;
virtual RegexpTerm* as_regexp_term() noexcept;
virtual FuzzyTerm* as_fuzzy_term() noexcept;
- virtual const MultiTerm* as_multi_index_multi_term() const noexcept;
virtual const EquivQueryNode* as_equiv_query_node() const noexcept;
virtual void unpack_match_data(uint32_t docid, const fef::ITermData& td, fef::MatchData& match_data, const fef::IIndexEnvironment& index_env);
protected:
diff --git a/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.cpp b/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.cpp
index ae1ae8d5230..cd9c693ca1c 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.cpp
@@ -89,10 +89,10 @@ SameElementQueryNode::unpack_match_data(uint32_t docid, const fef::ITermData& td
}
}
-const MultiTerm*
-SameElementQueryNode::as_multi_index_multi_term() const noexcept
+bool
+SameElementQueryNode::multi_index_terms() const noexcept
{
- return this;
+ return true;
}
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.h b/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.h
index 8955071ba4a..37fb3dbba52 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.h
@@ -17,7 +17,7 @@ public:
bool evaluate() const override;
const HitList & evaluateHits(HitList & hl) const override;
void unpack_match_data(uint32_t docid, const fef::ITermData& td, fef::MatchData& match_data, const fef::IIndexEnvironment& index_env) override;
- const MultiTerm* as_multi_index_multi_term() const noexcept override;
+ bool multi_index_terms() const noexcept override;
};
}