diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2020-06-30 15:50:17 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2020-06-30 15:50:17 +0200 |
commit | c88dfb03753ea4292a163e249f386ed7e17e2e56 (patch) | |
tree | c5eabba8af325c18a4ec1c19b8a79aa4c1b8e6c0 | |
parent | 45a49659d89d66cbf4fe92c323f446a2160673b8 (diff) |
Use empty search when filter constraint is lower bound for wand variants.
3 files changed, 21 insertions, 8 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp index ced59ae7551..4a34a07a773 100644 --- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp @@ -421,14 +421,18 @@ public: }; std::unique_ptr<SearchIterator> -DirectWandBlueprint::createFilterSearch(bool, FilterConstraint) const +DirectWandBlueprint::createFilterSearch(bool, FilterConstraint constraint) const { - std::vector<DocumentWeightIterator> iterators; - iterators.reserve(_terms.size()); - for (const IDocumentWeightAttribute::LookupResult &r : _terms) { - _attr.create(r.posting_idx, iterators); + if (constraint == Blueprint::FilterConstraint::UPPER_BOUND) { + std::vector<DocumentWeightIterator> iterators; + iterators.reserve(_terms.size()); + for (const IDocumentWeightAttribute::LookupResult &r : _terms) { + _attr.create(r.posting_idx, iterators); + } + return attribute::DocumentWeightOrFilterSearch::create(std::move(iterators)); + } else { + return std::make_unique<queryeval::EmptySearch>(); } - return attribute::DocumentWeightOrFilterSearch::create(std::move(iterators)); } //----------------------------------------------------------------------------- diff --git a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp index 25a0ed27458..3f632cfc377 100644 --- a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp @@ -437,7 +437,11 @@ WeakAndBlueprint::createIntermediateSearch(MultiSearch::Children sub_searches, SearchIterator::UP WeakAndBlueprint::createFilterSearch(bool strict, FilterConstraint constraint) const { - return create_or_filter(get_children(), strict, constraint); + if (constraint == Blueprint::FilterConstraint::UPPER_BOUND) { + return create_or_filter(get_children(), strict, constraint); + } else { + return std::make_unique<EmptySearch>(); + } } //----------------------------------------------------------------------------- diff --git a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp index f1387bac9d7..4e83c45cbc0 100644 --- a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp @@ -3,6 +3,7 @@ #include "parallel_weak_and_blueprint.h" #include "parallel_weak_and_search.h" #include <vespa/searchlib/queryeval/field_spec.hpp> +#include <vespa/searchlib/queryeval/emptysearch.h> #include <vespa/searchlib/queryeval/searchiterator.h> #include <vespa/searchlib/fef/termfieldmatchdata.h> #include <vespa/vespalib/objects/visit.hpp> @@ -105,7 +106,11 @@ ParallelWeakAndBlueprint::createLeafSearch(const search::fef::TermFieldMatchData std::unique_ptr<SearchIterator> ParallelWeakAndBlueprint::createFilterSearch(bool strict, FilterConstraint constraint) const { - return create_or_filter(_terms, strict, constraint); + if (constraint == Blueprint::FilterConstraint::UPPER_BOUND) { + return create_or_filter(_terms, strict, constraint); + } else { + return std::make_unique<EmptySearch>(); + } } void |