summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-06-30 14:10:34 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-06-30 14:10:34 +0200
commit41127e148f44b2deca171e56142c00a05fc7b683 (patch)
tree931083457a6a2a7109ad96305cdacf5375f82c5d
parent5ffa3015103faf9108cd52e183386737a952f388 (diff)
Use empty search when asked for an underestimate filter for same element blueprint.
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
index 2e21248d21c..4de52af102b 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
@@ -4,6 +4,7 @@
#include "same_element_search.h"
#include "field_spec.hpp"
#include "andsearch.h"
+#include "emptysearch.h"
#include <vespa/searchlib/fef/termfieldmatchdata.h>
#include <vespa/searchlib/attribute/searchcontextelementiterator.h>
#include <vespa/vespalib/objects/visit.hpp>
@@ -92,15 +93,19 @@ SameElementBlueprint::createLeafSearch(const search::fef::TermFieldMatchDataArra
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));
+ if (constraint == Blueprint::FilterConstraint::UPPER_BOUND) {
+ 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;
+ } else {
+ return std::make_unique<EmptySearch>();
}
- UnpackInfo unpack_info;
- auto search = AndSearch::create(std::move(sub_searches), strict, unpack_info);
- return search;
}
void