diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2020-06-30 13:46:31 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2020-06-30 13:50:26 +0200 |
commit | 5ffa3015103faf9108cd52e183386737a952f388 (patch) | |
tree | 1f8fce043faa62b0524d4af4092cc422bee10d6b | |
parent | 99f8036a385fa9c5573a6a786350ed8ec3040ef7 (diff) |
Add filter iterator for same element blueprint.
-rw-r--r-- | searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp | 15 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h | 1 |
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; } |