summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-06-30 15:50:17 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-06-30 15:50:17 +0200
commitc88dfb03753ea4292a163e249f386ed7e17e2e56 (patch)
treec5eabba8af325c18a4ec1c19b8a79aa4c1b8e6c0
parent45a49659d89d66cbf4fe92c323f446a2160673b8 (diff)
Use empty search when filter constraint is lower bound for wand variants.
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp16
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp7
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