diff options
-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; } |