summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-06-30 13:46:31 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-06-30 13:50:26 +0200
commit5ffa3015103faf9108cd52e183386737a952f388 (patch)
tree1f8fce043faa62b0524d4af4092cc422bee10d6b
parent99f8036a385fa9c5573a6a786350ed8ec3040ef7 (diff)
Add filter iterator for same element blueprint.
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
index ac4f164b09f..2e21248d21c 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
@@ -3,6 +3,7 @@
#include "same_element_blueprint.h"
#include "same_element_search.h"
#include "field_spec.hpp"
+#include "andsearch.h"
#include <vespa/searchlib/fef/termfieldmatchdata.h>
#include <vespa/searchlib/attribute/searchcontextelementiterator.h>
#include <vespa/vespalib/objects/visit.hpp>
@@ -88,6 +89,20 @@ SameElementBlueprint::createLeafSearch(const search::fef::TermFieldMatchDataArra
return create_same_element_search(strict);
}
+SearchIterator::UP
+SameElementBlueprint::createFilterSearch(bool strict, FilterConstraint constraint) const
+{
+ MultiSearch::Children sub_searches;
+ sub_searches.reserve(_terms.size());
+ for (size_t i = 0; i < _terms.size(); ++i) {
+ auto search = _terms[i]->createFilterSearch(strict && (i == 0), constraint);
+ sub_searches.push_back(std::move(search));
+ }
+ UnpackInfo unpack_info;
+ auto search = AndSearch::create(std::move(sub_searches), strict, unpack_info);
+ return search;
+}
+
void
SameElementBlueprint::visitMembers(vespalib::ObjectVisitor &visitor) const
{
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
index 8d647ac3a32..be04203fc6d 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
@@ -40,6 +40,7 @@ public:
std::unique_ptr<SameElementSearch> create_same_element_search(bool strict) const;
SearchIteratorUP createLeafSearch(const search::fef::TermFieldMatchDataArray &tfmda,
bool strict) const override;
+ SearchIteratorUP createFilterSearch(bool strict, FilterConstraint constraint) const override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
const std::vector<Blueprint::UP> &terms() const { return _terms; }
const vespalib::string &field_name() const { return _field_name; }