aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-02-05 11:35:33 +0100
committerTor Egge <Tor.Egge@online.no>2024-02-05 11:35:33 +0100
commit1fbd4658790ef11337b1df5619e0ac6de22d6e11 (patch)
treee4f2cd0f70ef22598dff0c35bdd06f34f711679f
parent2a7f13b47eb2ddb18e4a98d94b8e3c1d41e89bbe (diff)
streaming search query nodes.
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/multi_term.h2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/near_query_node.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/near_query_node.h2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/onear_query_node.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/onear_query_node.h2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.h4
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/query.cpp18
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/query.h18
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/querynode.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/querynode.h4
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/queryterm.h4
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/same_element_query_node.h4
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/wand_term.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/wand_term.h2
-rw-r--r--streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp12
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp30
22 files changed, 67 insertions, 67 deletions
diff --git a/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp b/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
index f5a09892551..df6b2330ddd 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/multi_term.cpp
@@ -43,7 +43,7 @@ MultiTerm::reset()
}
bool
-MultiTerm::evaluate() const
+MultiTerm::evaluate()
{
for (const auto& term : _terms) {
if (term->evaluate()) return true;
diff --git a/searchlib/src/vespa/searchlib/query/streaming/multi_term.h b/searchlib/src/vespa/searchlib/query/streaming/multi_term.h
index 6f795c31356..5c146d1b916 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/multi_term.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/multi_term.h
@@ -31,7 +31,7 @@ public:
void add_term(std::unique_ptr<QueryTerm> term);
MultiTerm* as_multi_term() noexcept override { return this; }
void reset() override;
- bool evaluate() const override;
+ bool evaluate() override;
virtual void unpack_match_data(uint32_t docid, const fef::ITermData& td, fef::MatchData& match_data) = 0;
const std::vector<std::unique_ptr<QueryTerm>>& get_terms() const noexcept { return _terms; }
};
diff --git a/searchlib/src/vespa/searchlib/query/streaming/near_query_node.cpp b/searchlib/src/vespa/searchlib/query/streaming/near_query_node.cpp
index a777841bd70..80b2609b0b3 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/near_query_node.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/near_query_node.cpp
@@ -47,7 +47,7 @@ NearQueryNode::evaluate_helper() const
}
bool
-NearQueryNode::evaluate() const
+NearQueryNode::evaluate()
{
return evaluate_helper<false>();
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/near_query_node.h b/searchlib/src/vespa/searchlib/query/streaming/near_query_node.h
index 9258c3efe27..867f0d96194 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/near_query_node.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/near_query_node.h
@@ -17,7 +17,7 @@ protected:
public:
NearQueryNode() noexcept : AndQueryNode("NEAR"), _distance(0) { }
explicit NearQueryNode(const char * opName) noexcept : AndQueryNode(opName), _distance(0) { }
- bool evaluate() const override;
+ bool evaluate() override;
void distance(size_t dist) { _distance = dist; }
size_t distance() const { return _distance; }
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
diff --git a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp
index 1317d1c0651..efbd6c935dc 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp
@@ -22,7 +22,7 @@ NearestNeighborQueryNode::NearestNeighborQueryNode(std::unique_ptr<QueryNodeResu
NearestNeighborQueryNode::~NearestNeighborQueryNode() = default;
bool
-NearestNeighborQueryNode::evaluate() const
+NearestNeighborQueryNode::evaluate()
{
return _distance.has_value();
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h
index c3eaad45031..c8a7f47d28a 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h
@@ -41,7 +41,7 @@ public:
NearestNeighborQueryNode(NearestNeighborQueryNode &&) = delete;
NearestNeighborQueryNode & operator = (NearestNeighborQueryNode &&) = delete;
~NearestNeighborQueryNode() override;
- bool evaluate() const override;
+ bool evaluate() override;
void reset() override;
NearestNeighborQueryNode* as_nearest_neighbor_query_node() noexcept override;
const vespalib::string& get_query_tensor_name() const { return getTermString(); }
diff --git a/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.cpp b/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.cpp
index 45c04b411dc..1b75f3712e4 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.cpp
@@ -6,7 +6,7 @@
namespace search::streaming {
bool
-ONearQueryNode::evaluate() const
+ONearQueryNode::evaluate()
{
return evaluate_helper<true>();
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.h b/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.h
index 649496b62d9..754b3da2f7b 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/onear_query_node.h
@@ -14,7 +14,7 @@ class ONearQueryNode : public NearQueryNode
{
public:
ONearQueryNode() noexcept : NearQueryNode("ONEAR") { }
- bool evaluate() const override;
+ bool evaluate() override;
};
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.cpp b/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.cpp
index 0020089ef62..92016b9e50b 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.cpp
@@ -15,7 +15,7 @@ PhraseQueryNode::PhraseQueryNode(std::unique_ptr<QueryNodeResultBase> result_bas
PhraseQueryNode::~PhraseQueryNode() = default;
bool
-PhraseQueryNode::evaluate() const
+PhraseQueryNode::evaluate()
{
HitList hl;
return ! evaluateHits(hl).empty();
@@ -62,7 +62,7 @@ PhraseQueryNode::as_multi_term() noexcept
}
const HitList &
-PhraseQueryNode::evaluateHits(HitList & hl) const
+PhraseQueryNode::evaluateHits(HitList & hl)
{
hl.clear();
_fieldInfo.clear();
diff --git a/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.h b/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.h
index 594eab3deba..ab95528c151 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/phrase_query_node.h
@@ -15,8 +15,8 @@ class PhraseQueryNode : public MultiTerm
public:
PhraseQueryNode(std::unique_ptr<QueryNodeResultBase> result_base, const string& index, uint32_t num_terms);
~PhraseQueryNode() override;
- bool evaluate() const override;
- const HitList & evaluateHits(HitList & hl) const override;
+ bool evaluate() override;
+ const HitList & evaluateHits(HitList & hl) override;
void getPhrases(QueryNodeRefList & tl) override;
void getPhrases(ConstQueryNodeRefList & tl) const override;
const QueryTerm::FieldInfo & getFieldInfo(size_t fid) const { return _fieldInfo[fid]; }
diff --git a/searchlib/src/vespa/searchlib/query/streaming/query.cpp b/searchlib/src/vespa/searchlib/query/streaming/query.cpp
index f1b3a804c50..afb5db481c6 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/query.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/query.cpp
@@ -31,7 +31,7 @@ QueryConnector::addChild(QueryNode::UP child) {
QueryConnector::~QueryConnector() = default;
const HitList &
-QueryConnector::evaluateHits(HitList & hl) const
+QueryConnector::evaluateHits(HitList & hl)
{
if (evaluate()) {
hl.emplace_back(0, 0, 1, 1);
@@ -121,17 +121,17 @@ QueryConnector::create(ParseItem::ItemType type)
}
bool
-TrueNode::evaluate() const
+TrueNode::evaluate()
{
return true;
}
-bool FalseNode::evaluate() const {
+bool FalseNode::evaluate() {
return false;
}
bool
-AndQueryNode::evaluate() const
+AndQueryNode::evaluate()
{
for (const auto & qn : getChildren()) {
if ( ! qn->evaluate() ) return false;
@@ -140,7 +140,7 @@ AndQueryNode::evaluate() const
}
bool
-AndNotQueryNode::evaluate() const {
+AndNotQueryNode::evaluate() {
if (getChildren().empty()) return true;
auto it = getChildren().begin();
auto mt = getChildren().end();
@@ -154,7 +154,7 @@ AndNotQueryNode::evaluate() const {
}
bool
-OrQueryNode::evaluate() const {
+OrQueryNode::evaluate() {
for (const auto & qn : getChildren()) {
if (qn->evaluate()) return true;
}
@@ -162,7 +162,7 @@ OrQueryNode::evaluate() const {
}
bool
-RankWithQueryNode::evaluate() const {
+RankWithQueryNode::evaluate() {
bool first = true;
bool firstOk = false;
for (const auto & qn : getChildren()) {
@@ -175,7 +175,7 @@ RankWithQueryNode::evaluate() const {
}
bool
-EquivQueryNode::evaluate() const
+EquivQueryNode::evaluate()
{
return OrQueryNode::evaluate();
}
@@ -189,7 +189,7 @@ Query::Query(const QueryNodeResultFactory & factory, vespalib::stringref queryRe
}
bool
-Query::evaluate() const {
+Query::evaluate() {
return valid() && _root->evaluate();
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/query.h b/searchlib/src/vespa/searchlib/query/streaming/query.h
index 5296d3a4f69..e3988f1dac8 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/query.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/query.h
@@ -15,7 +15,7 @@ class QueryConnector : public QueryNode
public:
explicit QueryConnector(const char * opName) noexcept;
~QueryConnector() override;
- const HitList & evaluateHits(HitList & hl) const override;
+ const HitList & evaluateHits(HitList & hl) override;
void reset() override;
void getLeaves(QueryTermList & tl) override;
void getLeaves(ConstQueryTermList & tl) const override;
@@ -45,7 +45,7 @@ class TrueNode : public QueryConnector
{
public:
TrueNode() noexcept : QueryConnector("AND") { }
- bool evaluate() const override;
+ bool evaluate() override;
};
/** False operator. Matches nothing. */
@@ -53,7 +53,7 @@ class FalseNode : public QueryConnector
{
public:
FalseNode() noexcept : QueryConnector("AND") { }
- bool evaluate() const override;
+ bool evaluate() override;
};
/**
@@ -64,7 +64,7 @@ class AndQueryNode : public QueryConnector
public:
AndQueryNode() noexcept : QueryConnector("AND") { }
explicit AndQueryNode(const char * opName) noexcept : QueryConnector(opName) { }
- bool evaluate() const override;
+ bool evaluate() override;
bool isFlattenable(ParseItem::ItemType type) const override { return type == ParseItem::ITEM_AND; }
};
@@ -75,7 +75,7 @@ class AndNotQueryNode : public QueryConnector
{
public:
AndNotQueryNode() noexcept : QueryConnector("ANDNOT") { }
- bool evaluate() const override;
+ bool evaluate() override;
bool isFlattenable(ParseItem::ItemType) const override { return false; }
};
@@ -87,7 +87,7 @@ class OrQueryNode : public QueryConnector
public:
OrQueryNode() noexcept : QueryConnector("OR") { }
explicit OrQueryNode(const char * opName) noexcept : QueryConnector(opName) { }
- bool evaluate() const override;
+ bool evaluate() override;
bool isFlattenable(ParseItem::ItemType type) const override {
return (type == ParseItem::ITEM_OR) ||
(type == ParseItem::ITEM_WEAK_AND);
@@ -102,7 +102,7 @@ class RankWithQueryNode : public QueryConnector
public:
RankWithQueryNode() noexcept : QueryConnector("RANK") { }
explicit RankWithQueryNode(const char * opName) noexcept : QueryConnector(opName) { }
- bool evaluate() const override;
+ bool evaluate() override;
};
@@ -113,7 +113,7 @@ class EquivQueryNode : public OrQueryNode
{
public:
EquivQueryNode() noexcept : OrQueryNode("EQUIV") { }
- bool evaluate() const override;
+ bool evaluate() override;
bool isFlattenable(ParseItem::ItemType type) const override {
return (type == ParseItem::ITEM_EQUIV);
}
@@ -142,7 +142,7 @@ public:
/// Gives you all phrases of this tree.
void getPhrases(QueryNodeRefList & tl);
void getPhrases(ConstQueryNodeRefList & tl) const;
- bool evaluate() const;
+ bool evaluate();
size_t depth() const;
size_t width() const;
bool valid() const { return _root.get() != nullptr; }
diff --git a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp
index 69fe77d3fd5..bbfc2bab1b0 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp
@@ -202,7 +202,7 @@ QueryNode::Build(const QueryNode * parent, const QueryNodeResultFactory & factor
return qn;
}
-const HitList & QueryNode::evaluateHits(HitList & hl) const
+const HitList & QueryNode::evaluateHits(HitList & hl)
{
return hl;
}
diff --git a/searchlib/src/vespa/searchlib/query/streaming/querynode.h b/searchlib/src/vespa/searchlib/query/streaming/querynode.h
index 01974c70843..8f39d7fe4cf 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/querynode.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/querynode.h
@@ -40,10 +40,10 @@ class QueryNode
virtual ~QueryNode() = default;
/// This evalutes if the subtree starting here evaluates to true.
- virtual bool evaluate() const = 0;
+ virtual bool evaluate() = 0;
/// This return the hitList for this subtree. Does only give meaning in a
/// phrase search or any other search that requires position info.
- virtual const HitList & evaluateHits(HitList & hl) const;
+ virtual const HitList & evaluateHits(HitList & hl);
/// Clears all the hitlists so the query tree can be reused.
virtual void reset() = 0;
/// Gives you all leafs of this tree.
diff --git a/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp b/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp
index b7e619cfe4c..ee13151045d 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/queryterm.cpp
@@ -151,9 +151,9 @@ void QueryTerm::getPhrases(QueryNodeRefList & tl) { (void) tl; }
void QueryTerm::getPhrases(ConstQueryNodeRefList & tl) const { (void) tl; }
void QueryTerm::getLeaves(QueryTermList & tl) { tl.push_back(this); }
void QueryTerm::getLeaves(ConstQueryTermList & tl) const { tl.push_back(this); }
-bool QueryTerm::evaluate() const { return !_hitList.empty(); }
+bool QueryTerm::evaluate() { return !_hitList.empty(); }
void QueryTerm::reset() { _hitList.clear(); }
-const HitList & QueryTerm::evaluateHits(HitList &) const { return _hitList; }
+const HitList & QueryTerm::evaluateHits(HitList &) { return _hitList; }
void QueryTerm::resizeFieldId(size_t fieldNo)
{
diff --git a/searchlib/src/vespa/searchlib/query/streaming/queryterm.h b/searchlib/src/vespa/searchlib/query/streaming/queryterm.h
index 108cc1c148d..893b55088d1 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/queryterm.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/queryterm.h
@@ -64,8 +64,8 @@ public:
QueryTerm(QueryTerm &&) = delete;
QueryTerm & operator = (QueryTerm &&) = delete;
~QueryTerm() override;
- bool evaluate() const override;
- const HitList & evaluateHits(HitList & hl) const override;
+ bool evaluate() override;
+ const HitList & evaluateHits(HitList & hl) override;
void reset() override;
void getLeaves(QueryTermList & tl) override;
void getLeaves(ConstQueryTermList & tl) const override;
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 49d5fb0f9fb..56706adc94c 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
@@ -6,7 +6,7 @@
namespace search::streaming {
bool
-SameElementQueryNode::evaluate() const {
+SameElementQueryNode::evaluate() {
HitList hl;
return ! evaluateHits(hl).empty();
}
@@ -18,7 +18,7 @@ SameElementQueryNode::addChild(QueryNode::UP child) {
}
const HitList &
-SameElementQueryNode::evaluateHits(HitList & hl) const
+SameElementQueryNode::evaluateHits(HitList & hl)
{
hl.clear();
if ( !AndQueryNode::evaluate()) return hl;
@@ -28,10 +28,10 @@ SameElementQueryNode::evaluateHits(HitList & hl) const
unsigned int numFields = children.size();
unsigned int currMatchCount = 0;
std::vector<unsigned int> indexVector(numFields, 0);
- auto curr = static_cast<const QueryTerm *> (children[currMatchCount].get());
+ auto curr = static_cast<QueryTerm *> (children[currMatchCount].get());
bool exhausted( curr->evaluateHits(tmpHL).empty());
for (; !exhausted; ) {
- auto next = static_cast<const QueryTerm *>(children[currMatchCount+1].get());
+ auto next = static_cast<QueryTerm *>(children[currMatchCount+1].get());
unsigned int & currIndex = indexVector[currMatchCount];
unsigned int & nextIndex = indexVector[currMatchCount+1];
@@ -56,7 +56,7 @@ SameElementQueryNode::evaluateHits(HitList & hl) const
currMatchCount = 0;
indexVector[currMatchCount]++;
}
- curr = static_cast<const QueryTerm *>(children[currMatchCount].get());
+ curr = static_cast<QueryTerm *>(children[currMatchCount].get());
exhausted = (nextIndex >= nextIndexMax) || (indexVector[currMatchCount] >= curr->evaluateHits(tmpHL).size());
}
return hl;
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 8e675feb569..c91dadf9703 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
@@ -13,8 +13,8 @@ class SameElementQueryNode : public AndQueryNode
{
public:
SameElementQueryNode() noexcept : AndQueryNode("SAME_ELEMENT") { }
- bool evaluate() const override;
- const HitList & evaluateHits(HitList & hl) const override;
+ bool evaluate() override;
+ const HitList & evaluateHits(HitList & hl) override;
bool isFlattenable(ParseItem::ItemType) const override { return false; }
void addChild(QueryNode::UP child) override;
};
diff --git a/searchlib/src/vespa/searchlib/query/streaming/wand_term.cpp b/searchlib/src/vespa/searchlib/query/streaming/wand_term.cpp
index a561adf5b42..931658f60cd 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/wand_term.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/wand_term.cpp
@@ -18,7 +18,7 @@ WandTerm::WandTerm(std::unique_ptr<QueryNodeResultBase> result_base, const strin
WandTerm::~WandTerm() = default;
bool
-WandTerm::evaluate() const
+WandTerm::evaluate()
{
if (_score_threshold <= 0.0) {
return DotProductTerm::evaluate();
diff --git a/searchlib/src/vespa/searchlib/query/streaming/wand_term.h b/searchlib/src/vespa/searchlib/query/streaming/wand_term.h
index 1b342834216..e3cfe168a8a 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/wand_term.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/wand_term.h
@@ -15,7 +15,7 @@ public:
WandTerm(std::unique_ptr<QueryNodeResultBase> result_base, const string& index, uint32_t num_terms);
~WandTerm() override;
void set_score_threshold(double value) { _score_threshold = value; }
- bool evaluate() const override;
+ bool evaluate() override;
void unpack_match_data(uint32_t docid, const fef::ITermData& td, fef::MatchData& match_data) override;
};
diff --git a/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp b/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp
index 5c1e15e0c5c..8feea75c502 100644
--- a/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp
+++ b/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp
@@ -41,7 +41,7 @@ struct MockQuery {
return *this;
}
~MockQuery() {}
- const NearestNeighborQueryNode& get(size_t idx) const {
+ NearestNeighborQueryNode& get(size_t idx) {
assert(idx < nodes.size());
return *nodes[idx];
}
@@ -90,17 +90,17 @@ public:
query.reset();
searcher.onValue(fv);
}
- void expect_match(const vespalib::string& spec_expr, double exp_square_distance, const NearestNeighborQueryNode& node) {
+ void expect_match(const vespalib::string& spec_expr, double exp_square_distance, NearestNeighborQueryNode& node) {
match(spec_expr);
expect_match(exp_square_distance, node);
}
- void expect_match(double exp_square_distance, const NearestNeighborQueryNode& node) {
+ void expect_match(double exp_square_distance, NearestNeighborQueryNode& node) {
double exp_raw_score = 1.0 / (1.0 + std::sqrt(exp_square_distance));
EXPECT_TRUE(node.evaluate());
EXPECT_DOUBLE_EQ(exp_square_distance, node.get_distance().value());
EXPECT_DOUBLE_EQ(exp_raw_score, node.get_raw_score().value());
}
- void expect_not_match(const vespalib::string& spec_expr, const NearestNeighborQueryNode& node) {
+ void expect_not_match(const vespalib::string& spec_expr, NearestNeighborQueryNode& node) {
match(spec_expr);
EXPECT_FALSE(node.evaluate());
}
@@ -109,7 +109,7 @@ public:
TEST_F(NearestNeighborSearcherTest, distance_heap_keeps_the_best_target_hits)
{
query.add("qt1", 2, 100.0);
- const auto& node = query.get(0);
+ auto& node = query.get(0);
set_query_tensor("qt1", "tensor(x[2]):[1,3]");
prepare();
@@ -140,7 +140,7 @@ TEST_F(NearestNeighborSearcherTest, distance_heap_keeps_the_best_target_hits)
TEST_F(NearestNeighborSearcherTest, raw_score_calculated_with_distance_threshold)
{
query.add("qt1", 10, 3.0);
- const auto& node = query.get(0);
+ auto& node = query.get(0);
set_query_tensor("qt1", "tensor(x[2]):[1,3]");
prepare();
diff --git a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
index 79bacda3f3b..8a50804c786 100644
--- a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
@@ -31,40 +31,40 @@ namespace {
struct SubFieldTerm
{
vespalib::string _field_name;
- const QueryTerm* _term;
+ QueryTerm* _term;
public:
- SubFieldTerm(vespalib::string field_name, const QueryTerm* term) noexcept
+ SubFieldTerm(vespalib::string field_name, QueryTerm* term) noexcept
: _field_name(std::move(field_name)),
_term(term)
{
}
const vespalib::string& get_field_name() const { return _field_name; }
- const QueryTerm& get_term() const { return *_term; }
+ QueryTerm& get_term() const { return *_term; }
};
class Matcher
{
- std::vector<const SameElementQueryNode*> _same_element_nodes;
+ std::vector<SameElementQueryNode*> _same_element_nodes;
std::vector<SubFieldTerm> _sub_field_terms;
vsm::FieldIdTSearcherMap& _field_searcher_map;
HitList _hit_list;
std::vector<uint32_t> _elements;
- void select_query_nodes(const MatchingElementsFields& fields, const QueryNode& query_node);
+ void select_query_nodes(const MatchingElementsFields& fields, QueryNode& query_node);
void add_matching_elements(const vespalib::string& field_name, uint32_t doc_lid, const HitList& hit_list, MatchingElements& matching_elements);
- void find_matching_elements(const SameElementQueryNode& same_element, uint32_t doc_lid, MatchingElements& matching_elements);
- void find_matching_elements(const SubFieldTerm& sub_field_term, uint32_t doc_lid, MatchingElements& matching_elements);
+ void find_matching_elements(SameElementQueryNode& same_element, uint32_t doc_lid, MatchingElements& matching_elements);
+ void find_matching_elements(SubFieldTerm& sub_field_term, uint32_t doc_lid, MatchingElements& matching_elements);
public:
- Matcher(vsm::FieldIdTSearcherMap& field_searcher_map, const MatchingElementsFields& fields, const Query& query);
+ Matcher(vsm::FieldIdTSearcherMap& field_searcher_map, const MatchingElementsFields& fields, Query& query);
~Matcher();
bool empty() const { return _same_element_nodes.empty() && _sub_field_terms.empty(); }
void find_matching_elements(const vsm::StorageDocument& doc, uint32_t doc_lid, MatchingElements& matching_elements);
};
template<typename T>
-const T* as(const QueryNode& query_node) { return dynamic_cast<const T*>(&query_node); }
+T* as(QueryNode& query_node) { return dynamic_cast<T*>(&query_node); }
-Matcher::Matcher(FieldIdTSearcherMap& field_searcher_map, const MatchingElementsFields& fields, const Query& query)
+Matcher::Matcher(FieldIdTSearcherMap& field_searcher_map, const MatchingElementsFields& fields, Query& query)
: _same_element_nodes(),
_sub_field_terms(),
_field_searcher_map(field_searcher_map),
@@ -76,7 +76,7 @@ Matcher::Matcher(FieldIdTSearcherMap& field_searcher_map, const MatchingElements
Matcher::~Matcher() = default;
void
-Matcher::select_query_nodes(const MatchingElementsFields& fields, const QueryNode& query_node)
+Matcher::select_query_nodes(const MatchingElementsFields& fields, QueryNode& query_node)
{
if (auto same_element = as<SameElementQueryNode>(query_node)) {
if (fields.has_field(same_element->getIndex())) {
@@ -121,7 +121,7 @@ Matcher::add_matching_elements(const vespalib::string& field_name, uint32_t doc_
}
void
-Matcher::find_matching_elements(const SameElementQueryNode& same_element, uint32_t doc_lid, MatchingElements& matching_elements)
+Matcher::find_matching_elements(SameElementQueryNode& same_element, uint32_t doc_lid, MatchingElements& matching_elements)
{
const HitList& hit_list = same_element.evaluateHits(_hit_list);
if (!hit_list.empty()) {
@@ -130,7 +130,7 @@ Matcher::find_matching_elements(const SameElementQueryNode& same_element, uint32
}
void
-Matcher::find_matching_elements(const SubFieldTerm& sub_field_term, uint32_t doc_lid, MatchingElements& matching_elements)
+Matcher::find_matching_elements(SubFieldTerm& sub_field_term, uint32_t doc_lid, MatchingElements& matching_elements)
{
const HitList& hit_list = sub_field_term.get_term().evaluateHits(_hit_list);
if (!hit_list.empty()) {
@@ -144,10 +144,10 @@ Matcher::find_matching_elements(const StorageDocument& doc, uint32_t doc_lid, Ma
for (vsm::FieldSearcherContainer& fSearch : _field_searcher_map) {
fSearch->search(doc);
}
- for (const auto* same_element : _same_element_nodes) {
+ for (auto* same_element : _same_element_nodes) {
find_matching_elements(*same_element, doc_lid, matching_elements);
}
- for (const auto& term : _sub_field_terms) {
+ for (auto& term : _sub_field_terms) {
find_matching_elements(term, doc_lid, matching_elements);
}
}