summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-12-24 11:09:34 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2019-12-31 15:58:39 +0000
commit7d7b46f012b4f9bbd416f17a945204acc28c6ae5 (patch)
tree96a4cc5f82fea12b073e70522219c5c6b36ffbec
parent6d7909e022817be11b5f088cbd1e537d9b71919d (diff)
Add ExecutionInfo to propagate more information than just strictness to fetchPostings.
The estimated hitrate that each iterator will will enable smarter query evaluation. Especially will it be possible to figure out if static up front cost can be avoided.
-rw-r--r--searchcommon/src/vespa/searchcommon/attribute/i_search_context.h7
-rw-r--r--searchcore/src/tests/proton/documentmetastore/documentmetastore_test.cpp2
-rw-r--r--searchcore/src/tests/proton/feed_and_search/feed_and_search.cpp2
-rw-r--r--searchcore/src/tests/proton/index/fusionrunner_test.cpp2
-rw-r--r--searchcore/src/tests/proton/matching/match_phase_limiter/match_phase_limiter_test.cpp9
-rw-r--r--searchcore/src/tests/proton/matching/query_test.cpp11
-rw-r--r--searchcore/src/tests/proton/matching/querynodes_test.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/documentmetastore/lid_allocator.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/query.cpp2
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp2
-rw-r--r--searchlib/src/apps/tests/memoryindexstress_test.cpp6
-rw-r--r--searchlib/src/tests/attribute/benchmark/attributesearcher.h7
-rw-r--r--searchlib/src/tests/attribute/bitvector/bitvector_test.cpp4
-rw-r--r--searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp5
-rw-r--r--searchlib/src/tests/attribute/imported_search_context/imported_search_context_test.cpp19
-rw-r--r--searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp26
-rw-r--r--searchlib/src/tests/attribute/searchable/attribute_searchable_adapter_test.cpp6
-rw-r--r--searchlib/src/tests/attribute/searchable/attribute_weighted_set_blueprint_test.cpp4
-rw-r--r--searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp2
-rw-r--r--searchlib/src/tests/attribute/searchcontext/searchcontext.cpp17
-rw-r--r--searchlib/src/tests/diskindex/diskindex/diskindex_test.cpp15
-rw-r--r--searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp2
-rw-r--r--searchlib/src/tests/memoryindex/memory_index/memory_index_test.cpp4
-rw-r--r--searchlib/src/tests/nearsearch/nearsearch_test.cpp4
-rw-r--r--searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp2
-rw-r--r--searchlib/src/tests/queryeval/blueprint/intermediate_blueprints_test.cpp16
-rw-r--r--searchlib/src/tests/queryeval/blueprint/leaf_blueprints_test.cpp6
-rw-r--r--searchlib/src/tests/queryeval/blueprint/mysearch.h2
-rw-r--r--searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp2
-rw-r--r--searchlib/src/tests/queryeval/equiv/equiv_test.cpp2
-rw-r--r--searchlib/src/tests/queryeval/fake_searchable/fake_searchable_test.cpp14
-rw-r--r--searchlib/src/tests/queryeval/parallel_weak_and/parallel_weak_and_test.cpp4
-rw-r--r--searchlib/src/tests/queryeval/predicate/predicate_blueprint_test.cpp11
-rw-r--r--searchlib/src/tests/queryeval/queryeval.cpp12
-rw-r--r--searchlib/src/tests/queryeval/same_element/same_element_test.cpp2
-rw-r--r--searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp5
-rw-r--r--searchlib/src/tests/queryeval/sourceblender/sourceblender.cpp2
-rw-r--r--searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.cpp3
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.h4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/imported_search_context.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/ipostinglistsearchcontext.h7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h10
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/CMakeLists.txt1
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/blueprint.cpp12
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/blueprint.h11
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/executeinfo.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/executeinfo.h27
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp1
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h2
75 files changed, 251 insertions, 187 deletions
diff --git a/searchcommon/src/vespa/searchcommon/attribute/i_search_context.h b/searchcommon/src/vespa/searchcommon/attribute/i_search_context.h
index 9a24ab82c9f..795129bf3b8 100644
--- a/searchcommon/src/vespa/searchcommon/attribute/i_search_context.h
+++ b/searchcommon/src/vespa/searchcommon/attribute/i_search_context.h
@@ -6,7 +6,10 @@
#include <vespa/vespalib/stllike/string.h>
namespace search::fef { class TermFieldMatchData; }
-namespace search::queryeval { class SearchIterator; }
+namespace search::queryeval {
+ class SearchIterator;
+ class ExecuteInfo;
+}
namespace search { class QueryTermUCS4; }
namespace search::attribute {
@@ -43,7 +46,7 @@ public:
* Create temporary posting lists.
* Should be called before createIterator() is called.
*/
- virtual void fetchPostings(bool strict) = 0;
+ virtual void fetchPostings(const queryeval::ExecuteInfo &execInfo) = 0;
virtual bool valid() const = 0;
virtual Int64Range getAsIntegerTerm() const = 0;
diff --git a/searchcore/src/tests/proton/documentmetastore/documentmetastore_test.cpp b/searchcore/src/tests/proton/documentmetastore/documentmetastore_test.cpp
index 4dbc6be57ff..f8069dcf494 100644
--- a/searchcore/src/tests/proton/documentmetastore/documentmetastore_test.cpp
+++ b/searchcore/src/tests/proton/documentmetastore/documentmetastore_test.cpp
@@ -193,7 +193,7 @@ assertWhiteList(const SimpleResult &exp, Blueprint::UP whiteListBlueprint, bool
{
MatchDataLayout mdl;
MatchData::UP md = mdl.createMatchData();
- whiteListBlueprint->fetchPostings(strict);
+ whiteListBlueprint->fetchPostings(search::queryeval::ExecuteInfo::create(strict));
whiteListBlueprint->setDocIdLimit(docIdLimit);
SearchIterator::UP sb = whiteListBlueprint->createSearch(*md, strict);
diff --git a/searchcore/src/tests/proton/feed_and_search/feed_and_search.cpp b/searchcore/src/tests/proton/feed_and_search/feed_and_search.cpp
index 4580865b3a4..ca45108b698 100644
--- a/searchcore/src/tests/proton/feed_and_search/feed_and_search.cpp
+++ b/searchcore/src/tests/proton/feed_and_search/feed_and_search.cpp
@@ -125,7 +125,7 @@ void Test::testSearch(Searchable &source,
SimpleStringTerm node(term, field_name, 0, search::query::Weight(0));
Blueprint::UP result = source.createBlueprint(requestContext,
FieldSpecList().add(FieldSpec(field_name, 0, handle)), node);
- result->fetchPostings(true);
+ result->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchIterator::UP search_iterator =
result->createSearch(*match_data, true);
search_iterator->initFullRange();
diff --git a/searchcore/src/tests/proton/index/fusionrunner_test.cpp b/searchcore/src/tests/proton/index/fusionrunner_test.cpp
index 49b452aec2e..975061f9d88 100644
--- a/searchcore/src/tests/proton/index/fusionrunner_test.cpp
+++ b/searchcore/src/tests/proton/index/fusionrunner_test.cpp
@@ -243,7 +243,7 @@ void Test::checkResults(uint32_t fusion_id, const uint32_t *ids, size_t size) {
search::queryeval::Searchable &searchable = disk_index;
SimpleStringTerm node(term, field_name, fieldId, search::query::Weight(0));
Blueprint::UP blueprint = searchable.createBlueprint(requestContext, fields, node);
- blueprint->fetchPostings(true);
+ blueprint->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchIterator::UP search = blueprint->createSearch(*match_data, true);
search->initFullRange();
for (size_t i = 0; i < size; ++i) {
diff --git a/searchcore/src/tests/proton/matching/match_phase_limiter/match_phase_limiter_test.cpp b/searchcore/src/tests/proton/matching/match_phase_limiter/match_phase_limiter_test.cpp
index 2d0482b0d92..201824cd764 100644
--- a/searchcore/src/tests/proton/matching/match_phase_limiter/match_phase_limiter_test.cpp
+++ b/searchcore/src/tests/proton/matching/match_phase_limiter/match_phase_limiter_test.cpp
@@ -4,6 +4,7 @@
#include <vespa/searchlib/queryeval/termasstring.h>
#include <vespa/searchlib/queryeval/andsearchstrict.h>
#include <vespa/searchlib/queryeval/fake_requestcontext.h>
+#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/searchlib/engine/trace.h>
#include <vespa/vespalib/data/slime/slime.h>
@@ -54,7 +55,7 @@ struct MockBlueprint : SimpleLeafBlueprint {
FieldSpec spec;
vespalib::string term;
bool postings_fetched = false;
- bool postings_strict = false;
+ search::queryeval::ExecuteInfo postings_strict = search::queryeval::ExecuteInfo::FALSE;
MockBlueprint(const FieldSpec &spec_in, const vespalib::string &term_in)
: SimpleLeafBlueprint(FieldSpecBaseList().add(spec_in)), spec(spec_in), term(term_in)
{
@@ -64,13 +65,13 @@ struct MockBlueprint : SimpleLeafBlueprint {
bool strict) const override
{
if (postings_fetched) {
- EXPECT_EQUAL(postings_strict, strict);
+ EXPECT_EQUAL(postings_strict.isStrict(), strict);
}
return SearchIterator::UP(new MockSearch(spec, term, strict, tfmda,
postings_fetched));
}
- virtual void fetchPostings(bool strict) override {
- postings_strict = strict;
+ virtual void fetchPostings(const search::queryeval::ExecuteInfo &execInfo) override {
+ postings_strict = execInfo;
postings_fetched = true;
}
};
diff --git a/searchcore/src/tests/proton/matching/query_test.cpp b/searchcore/src/tests/proton/matching/query_test.cpp
index cc6d964219d..a1215649943 100644
--- a/searchcore/src/tests/proton/matching/query_test.cpp
+++ b/searchcore/src/tests/proton/matching/query_test.cpp
@@ -69,6 +69,7 @@ using search::queryeval::AndBlueprint;
using search::queryeval::IntermediateBlueprint;
using search::queryeval::AndNotBlueprint;
using search::queryeval::SourceBlenderBlueprint;
+using search::queryeval::ExecuteInfo;
using std::string;
using std::vector;
@@ -455,7 +456,7 @@ SearchIterator::UP Test::getIterator(Node &node, ISearchContext &context) {
_blueprint = BlueprintBuilder::build(_requestContext, node, context);
- _blueprint->fetchPostings(true);
+ _blueprint->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search(_blueprint->createSearch(*_match_data, true));
search->initFullRange();
return search;
@@ -822,10 +823,10 @@ Test::requireThatFakeFieldSearchDumpsDiffer()
Blueprint::UP l3(a.createBlueprint(requestContext, fields2, n3)); // field
Blueprint::UP l4(b.createBlueprint(requestContext, fields1, n1)); // tag
- l1->fetchPostings(true);
- l2->fetchPostings(true);
- l3->fetchPostings(true);
- l4->fetchPostings(true);
+ l1->fetchPostings(ExecuteInfo::TRUE);
+ l2->fetchPostings(ExecuteInfo::TRUE);
+ l3->fetchPostings(ExecuteInfo::TRUE);
+ l4->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP s1(l1->createSearch(*match_data, true));
SearchIterator::UP s2(l2->createSearch(*match_data, true));
diff --git a/searchcore/src/tests/proton/matching/querynodes_test.cpp b/searchcore/src/tests/proton/matching/querynodes_test.cpp
index 297f75054b2..5d01753dfb6 100644
--- a/searchcore/src/tests/proton/matching/querynodes_test.cpp
+++ b/searchcore/src/tests/proton/matching/querynodes_test.cpp
@@ -201,7 +201,7 @@ public:
MatchData::UP match_data = mdl.createMatchData();
Blueprint::UP blueprint = BlueprintBuilder::build(requestContext, node, context);
- blueprint->fetchPostings(true);
+ blueprint->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
return blueprint->createSearch(*match_data, true)->asString();
}
diff --git a/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_allocator.cpp b/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_allocator.cpp
index 94217371af3..0c03727e017 100644
--- a/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_allocator.cpp
+++ b/searchcore/src/vespa/searchcore/proton/documentmetastore/lid_allocator.cpp
@@ -2,6 +2,7 @@
#include "lid_allocator.h"
#include <vespa/searchlib/common/bitvectoriterator.h>
+#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <mutex>
#include <vespa/log/log.h>
@@ -197,7 +198,7 @@ private:
mutable std::mutex _lock;
mutable std::vector<search::fef::TermFieldMatchData *> _matchDataVector;
- virtual SearchIterator::UP
+ SearchIterator::UP
createLeafSearch(const TermFieldMatchDataArray &tfmda,
bool strict) const override
{
diff --git a/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp b/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp
index d165a18ae37..a0841295746 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp
@@ -77,7 +77,7 @@ AttributeLimiter::create_search(size_t want_hits, size_t max_group_size, bool st
FieldSpecList field; // single field API is protected
field.add(FieldSpec(_attribute_name, my_field_id, my_handle));
_blueprint = _searchable_attributes.createBlueprint(_requestContext, field, node);
- _blueprint->fetchPostings(strictSearch);
+ _blueprint->fetchPostings(ExecuteInfo::create(strictSearch));
_estimatedHits = _blueprint->getState().estimate().estHits;
_blueprint->freeze();
}
diff --git a/searchcore/src/vespa/searchcore/proton/matching/query.cpp b/searchcore/src/vespa/searchcore/proton/matching/query.cpp
index fb9882bf1b1..04fdf57769a 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/query.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/query.cpp
@@ -195,7 +195,7 @@ Query::optimize()
void
Query::fetchPostings()
{
- _blueprint->fetchPostings(true);
+ _blueprint->fetchPostings(search::queryeval::ExecuteInfo(true, 1.0));
}
void
diff --git a/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp b/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp
index 39f6a489908..dabdf16e69e 100644
--- a/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp
+++ b/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp
@@ -224,7 +224,7 @@ WarmupIndexCollection::WarmupTask::run()
{
if (_warmup._warmupEndTime != vespalib::steady_time()) {
LOG(debug, "Warming up %s", _bluePrint->asString().c_str());
- _bluePrint->fetchPostings(true);
+ _bluePrint->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchIterator::UP it(_bluePrint->createSearch(*_matchData, true));
it->initFullRange();
for (uint32_t docId = it->seekFirst(1); !it->isAtEnd(); docId = it->seekNext(docId+1)) {
diff --git a/searchlib/src/apps/tests/memoryindexstress_test.cpp b/searchlib/src/apps/tests/memoryindexstress_test.cpp
index 1571cef630b..a7689cd6b9f 100644
--- a/searchlib/src/apps/tests/memoryindexstress_test.cpp
+++ b/searchlib/src/apps/tests/memoryindexstress_test.cpp
@@ -323,9 +323,9 @@ Fixture::readWork(uint32_t cnt)
} else {
++nonEmptyCount;
}
- result->fetchPostings(true);
+ result->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search = result->createSearch(*match_data, true);
- if (!EXPECT_TRUE(search.get() != 0)) {
+ if (!EXPECT_TRUE(search)) {
LOG(error, "Did not get search iterator");
break;
}
@@ -418,7 +418,7 @@ verifyResult(const FakeResult &expect,
EXPECT_EQUAL(expect.inspect().size(), result->getState().estimate().estHits);
EXPECT_EQUAL(expect.inspect().empty(), result->getState().estimate().empty);
- result->fetchPostings(true);
+ result->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search = result->createSearch(*match_data, true);
if (!EXPECT_TRUE(search.get() != 0)) {
return false;
diff --git a/searchlib/src/tests/attribute/benchmark/attributesearcher.h b/searchlib/src/tests/attribute/benchmark/attributesearcher.h
index 8ff6ba46e86..bcb70abc654 100644
--- a/searchlib/src/tests/attribute/benchmark/attributesearcher.h
+++ b/searchlib/src/tests/attribute/benchmark/attributesearcher.h
@@ -6,6 +6,7 @@
#include <vespa/searchlib/attribute/attribute.h>
#include <vespa/searchlib/attribute/attributeguard.h>
#include <vespa/searchlib/queryeval/hitcollector.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
#include <vespa/vespalib/stllike/asciistream.h>
#include <vespa/vespalib/util/compress.h>
#include <vespa/searchlib/parsequery/parse.h>
@@ -133,7 +134,7 @@ AttributeFindSearcher<T>::doRun()
_attrPtr->getSearch(vespalib::stringref(&_query[0], _query.size()),
attribute::SearchContextParams());
- searchContext->fetchPostings(true);
+ searchContext->fetchPostings(queryeval::ExecuteInfo::TRUE);
std::unique_ptr<queryeval::SearchIterator> iterator = searchContext->createIterator(nullptr, true);
std::unique_ptr<ResultSet> results = performSearch(*iterator, _attrPtr->getNumDocs());
@@ -211,7 +212,7 @@ AttributeRangeSearcher::doRun()
_attrPtr->getSearch(vespalib::stringref(&_query[0], _query.size()),
attribute::SearchContextParams());
- searchContext->fetchPostings(true);
+ searchContext->fetchPostings(queryeval::ExecuteInfo::TRUE);
std::unique_ptr<queryeval::SearchIterator> iterator = searchContext->createIterator(nullptr, true);
std::unique_ptr<ResultSet> results = performSearch(*iterator, _attrPtr->getNumDocs());
@@ -250,7 +251,7 @@ AttributePrefixSearcher::doRun()
_attrPtr->getSearch(vespalib::stringref(&_query[0], _query.size()),
attribute::SearchContextParams());
- searchContext->fetchPostings(true);
+ searchContext->fetchPostings(queryeval::ExecuteInfo::TRUE);
std::unique_ptr<queryeval::SearchIterator> iterator = searchContext->createIterator(nullptr, true);
std::unique_ptr<ResultSet> results = performSearch(*iterator, _attrPtr->getNumDocs());
diff --git a/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp b/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp
index a8abf1ff4fe..24919fb2341 100644
--- a/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp
+++ b/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp
@@ -17,6 +17,8 @@
#include <vespa/searchlib/parsequery/parse.h>
#include <vespa/log/log.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
+
LOG_SETUP("bitvector_test");
using search::AttributeFactory;
@@ -454,7 +456,7 @@ BitVectorTest::checkSearch(AttributePtr v,
bool checkStride)
{
TermFieldMatchData md;
- sc->fetchPostings(true);
+ sc->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = sc->createIterator(&md, true);
checkSearch(v, std::move(sb), md,
expFirstDocId, expLastDocId, expDocFreq, weights,
diff --git a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
index 09cd186811d..bf829f6607a 100644
--- a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
+++ b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp
@@ -9,11 +9,11 @@
#include <vespa/searchlib/attribute/attributememoryfilebufferwriter.h>
#include <vespa/searchlib/attribute/attributememorysavetarget.h>
#include <vespa/searchlib/attribute/attributesaver.h>
-#include <vespa/searchlib/attribute/attrvector.h>
#include <vespa/searchlib/attribute/multinumericattribute.h>
#include <vespa/searchlib/attribute/multistringattribute.h>
#include <vespa/searchlib/attribute/singlenumericattribute.h>
#include <vespa/searchlib/attribute/singlestringattribute.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
#include <vespa/searchlib/fef/termfieldmatchdata.h>
#include <vespa/searchlib/index/dummyfileheadercontext.h>
#include <vespa/searchlib/parsequery/parse.h>
@@ -29,6 +29,7 @@
#include <cmath>
using search::AttributeFactory;
+using search::AttributeVector;
using search::AttributeMemoryFileBufferWriter;
using search::BufferWriter;
using search::FloatingPointAttribute;
@@ -630,7 +631,7 @@ EnumeratedSaveTest::testReload(AttributePtr v0,
TermFieldMatchData md;
SearchContextPtr sc = getSearch<VectorType>(as<VectorType>(v));
- sc->fetchPostings(true);
+ sc->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = sc->createIterator(&md, true);
sb->initFullRange();
sb->seek(1u);
diff --git a/searchlib/src/tests/attribute/imported_search_context/imported_search_context_test.cpp b/searchlib/src/tests/attribute/imported_search_context/imported_search_context_test.cpp
index e8dbaefc2ba..1db013aaef3 100644
--- a/searchlib/src/tests/attribute/imported_search_context/imported_search_context_test.cpp
+++ b/searchlib/src/tests/attribute/imported_search_context/imported_search_context_test.cpp
@@ -8,6 +8,7 @@
#include <vespa/searchlib/queryeval/simpleresult.h>
#include <vespa/searchlib/test/imported_attribute_fixture.h>
#include <vespa/vespalib/test/insertion_operators.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
namespace search::attribute {
@@ -210,7 +211,7 @@ TEST_F("Non-strict iterator unpacks target match data for weighted set hit", Wse
TEST_F("Strict iterator is marked as strict", Fixture) {
auto ctx = f.create_context(word_term("5678"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
@@ -232,7 +233,7 @@ struct SingleValueFixture : Fixture {
TEST_F("Strict iterator seeks to first available hit LID", SingleValueFixture) {
auto ctx = f.create_context(word_term("5678"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
@@ -258,7 +259,7 @@ TEST_F("Strict iterator seeks to first available hit LID", SingleValueFixture) {
TEST_F("Strict iterator unpacks target match data for single value hit", SingleValueFixture) {
auto ctx = f.create_context(word_term("5678"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
@@ -270,7 +271,7 @@ TEST_F("Strict iterator unpacks target match data for single value hit", SingleV
TEST_F("Strict iterator unpacks target match data for array hit", ArrayValueFixture) {
auto ctx = f.create_context(word_term("1234"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
@@ -282,7 +283,7 @@ TEST_F("Strict iterator unpacks target match data for array hit", ArrayValueFixt
TEST_F("Strict iterator unpacks target match data for weighted set hit", WsetValueFixture) {
auto ctx = f.create_context(word_term("foo"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
@@ -293,7 +294,7 @@ TEST_F("Strict iterator unpacks target match data for weighted set hit", WsetVal
TEST_F("Strict iterator handles seek outside of LID space", ArrayValueFixture) {
auto ctx = f.create_context(word_term("1234"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
@@ -325,7 +326,7 @@ TEST_F("matches(weight) performs GID mapping and forwards to target attribute",
TEST_F("Multiple iterators can be created from the same context", SingleValueFixture) {
auto ctx = f.create_context(word_term("5678"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match1;
auto iter1 = f.create_strict_iterator(*ctx, match1);
@@ -380,7 +381,7 @@ TEST_F("Bit vector from search cache is used if found", SearchCacheFixture)
f.imported_attr->getSearchCache()->insert("5678",
makeSearchCacheEntry({2, 6}, f.get_imported_attr()->getNumDocs()));
auto ctx = f.create_context(word_term("5678"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
TEST_DO(f.assertSearch({2, 6}, *iter)); // Note: would be {3, 5} if cache was not used
@@ -399,7 +400,7 @@ TEST_F("Entry is inserted into search cache if bit vector posting list is used",
{
EXPECT_EQUAL(0u, f.imported_attr->getSearchCache()->size());
auto ctx = f.create_context(word_term("5678"));
- ctx->fetchPostings(true);
+ ctx->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData match;
auto iter = f.create_strict_iterator(*ctx, match);
TEST_DO(f.assertSearch({3, 5}, *iter));
diff --git a/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp b/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp
index 9b4c72e1027..0bb10bcdbe6 100644
--- a/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp
+++ b/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp
@@ -10,6 +10,7 @@
#include <vespa/searchlib/attribute/multinumericpostattribute.h>
#include <vespa/searchlib/attribute/singlestringpostattribute.h>
#include <vespa/searchlib/attribute/multistringpostattribute.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
#include <vespa/searchlib/parsequery/parse.h>
#include <vespa/searchlib/attribute/enumstore.hpp>
#include <vespa/searchlib/attribute/attributevector.hpp>
@@ -375,7 +376,7 @@ PostingListAttributeTest::assertSearch(const std::string &exp, StringAttribute &
{
TermFieldMatchData md;
SearchContextPtr sc = getSearch<StringAttribute>(sa);
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = sc->createIterator(&md, true);
if (!EXPECT_TRUE(assertIterator(exp, *sb)))
return false;
@@ -388,7 +389,7 @@ PostingListAttributeTest::assertSearch(const std::string &exp, StringAttribute &
{
TermFieldMatchData md;
SearchContextPtr sc = getSearch<StringAttribute, std::string>(sa, key, false);
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = sc->createIterator(&md, true);
if (!EXPECT_TRUE(assertIterator(exp, *sb, &md)))
return false;
@@ -400,7 +401,7 @@ PostingListAttributeTest::assertSearch(const std::string &exp, IntegerAttribute
{
TermFieldMatchData md;
SearchContextPtr sc = getSearch<IntegerAttribute, int32_t>(ia, key, false);
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = sc->createIterator(&md, true);
if (!EXPECT_TRUE(assertIterator(exp, *sb, &md)))
return false;
@@ -478,7 +479,7 @@ PostingListAttributeTest::checkSearch(bool useBitVector, const AttributeVector &
{
SearchContextPtr sc = getSearch(vec, term, false, attribute::SearchContextParams().useBitVector(useBitVector));
EXPECT_FALSE( ! sc );
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
size_t approx = sc->approximateHits();
EXPECT_EQUAL(numHits, approx);
if (docBegin == 0) {
@@ -883,15 +884,14 @@ PostingListAttributeTest::testMinMax(AttributePtr &ptr1, uint32_t trimmed)
{
TermFieldMatchData md;
SearchContextPtr sc = getSearch<VectorType>(as<VectorType>(ptr1));
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = sc->createIterator(&md, true);
sb->initFullRange();
const PostingInfo *pi = sb->getPostingInfo();
- ASSERT_TRUE(pi != NULL);
- const MinMaxPostingInfo *mmpi =
- dynamic_cast<const MinMaxPostingInfo *>(pi);
- ASSERT_TRUE(mmpi != NULL);
+ ASSERT_TRUE(pi != nullptr);
+ const MinMaxPostingInfo *mmpi = dynamic_cast<const MinMaxPostingInfo *>(pi);
+ ASSERT_TRUE(mmpi != nullptr);
if (ptr1->hasMultiValue()) {
if (trimmed == 2u) {
@@ -909,17 +909,17 @@ PostingListAttributeTest::testMinMax(AttributePtr &ptr1, uint32_t trimmed)
EXPECT_EQUAL(1u, sb->getDocId());
sc = getSearch2<VectorType>(as<VectorType>(ptr1));
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
sb = sc->createIterator(&md, true);
sb->initFullRange();
pi = sb->getPostingInfo();
if (trimmed == 2) {
- ASSERT_TRUE(pi == NULL);
+ ASSERT_TRUE(pi == nullptr);
} else {
- ASSERT_TRUE(pi != NULL);
+ ASSERT_TRUE(pi != nullptr);
mmpi = dynamic_cast<const MinMaxPostingInfo *>(pi);
- ASSERT_TRUE(mmpi != NULL);
+ ASSERT_TRUE(mmpi != nullptr);
if (ptr1->hasMultiValue()) {
if (trimmed == 0) {
diff --git a/searchlib/src/tests/attribute/searchable/attribute_searchable_adapter_test.cpp b/searchlib/src/tests/attribute/searchable/attribute_searchable_adapter_test.cpp
index 7bd755a0f98..491890544e0 100644
--- a/searchlib/src/tests/attribute/searchable/attribute_searchable_adapter_test.cpp
+++ b/searchlib/src/tests/attribute/searchable/attribute_searchable_adapter_test.cpp
@@ -211,11 +211,11 @@ Result do_search(IAttributeManager &attribute_manager, const Node &node, bool st
TermFieldHandle handle = mdl.allocTermField(fieldId);
MatchData::UP match_data = mdl.createMatchData();
Blueprint::UP bp = source.createBlueprint(requestContext, FieldSpec(field, fieldId, handle), node);
- ASSERT_TRUE(bp.get() != nullptr);
+ ASSERT_TRUE(bp);
Result result(bp->getState().estimate().estHits, bp->getState().estimate().empty);
- bp->fetchPostings(strict);
+ bp->fetchPostings(queryeval::ExecuteInfo(strict, 1.0));
SearchIterator::UP iterator = bp->createSearch(*match_data, strict);
- ASSERT_TRUE(iterator.get() != nullptr);
+ ASSERT_TRUE(iterator);
iterator->initRange(1, num_docs);
extract_posting_info(result, iterator->getPostingInfo());
extract_wand_params(result, dynamic_cast<ParallelWeakAndSearch*>(iterator.get()));
diff --git a/searchlib/src/tests/attribute/searchable/attribute_weighted_set_blueprint_test.cpp b/searchlib/src/tests/attribute/searchable/attribute_weighted_set_blueprint_test.cpp
index f6a9df54be3..fe5014b6607 100644
--- a/searchlib/src/tests/attribute/searchable/attribute_weighted_set_blueprint_test.cpp
+++ b/searchlib/src/tests/attribute/searchable/attribute_weighted_set_blueprint_test.cpp
@@ -103,7 +103,7 @@ struct WS {
Node::UP node = createNode();
FieldSpecList fields = FieldSpecList().add(FieldSpec(field, fieldId, handle));
queryeval::Blueprint::UP bp = searchable.createBlueprint(requestContext, fields, *node);
- bp->fetchPostings(strict);
+ bp->fetchPostings(queryeval::ExecuteInfo::create(strict));
SearchIterator::UP sb = bp->createSearch(*md, strict);
return (dynamic_cast<WeightedSetTermSearch*>(sb.get()) != 0);
}
@@ -115,7 +115,7 @@ struct WS {
Node::UP node = createNode();
FieldSpecList fields = FieldSpecList().add(FieldSpec(field, fieldId, handle));
queryeval::Blueprint::UP bp = searchable.createBlueprint(requestContext, fields, *node);
- bp->fetchPostings(strict);
+ bp->fetchPostings(queryeval::ExecuteInfo::create(strict));
SearchIterator::UP sb = bp->createSearch(*md, strict);
FakeResult result;
sb->initRange(1, 10);
diff --git a/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp b/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp
index 8a63f20822f..e2f21a3d306 100644
--- a/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp
+++ b/searchlib/src/tests/attribute/searchable/attributeblueprint_test.cpp
@@ -119,7 +119,7 @@ do_search(const Node &node, IAttributeManager &attribute_manager, bool expect_at
} else {
EXPECT_TRUE(result->get_attribute_search_context() == nullptr);
}
- result->fetchPostings(true);
+ result->fetchPostings(queryeval::ExecuteInfo::TRUE);
result->setDocIdLimit(DOCID_LIMIT);
SearchIterator::UP iterator = result->createSearch(*md, true);
assert((bool)iterator);
diff --git a/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp b/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp
index b518d683409..3b466c5b99d 100644
--- a/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp
+++ b/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp
@@ -12,6 +12,7 @@
#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/searchlib/queryeval/hitcollector.h>
#include <vespa/searchlib/queryeval/emptysearch.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/util/compress.h>
#include <vespa/searchlib/test/searchiteratorverifier.h>
@@ -204,7 +205,7 @@ private:
// test search iterator unpacking
void fillForSearchIteratorUnpackingTest(IntegerAttribute * ia, bool extra);
void testSearchIteratorUnpacking(const AttributePtr & ptr, SearchContext & sc, bool extra, bool strict) {
- sc.fetchPostings(strict);
+ sc.fetchPostings(queryeval::ExecuteInfo(strict, 1.0));
for (bool withElementId : {false, true}) {
testSearchIteratorUnpacking(ptr, sc, extra, strict, withElementId);
}
@@ -439,7 +440,7 @@ SearchContextTest::performSearch(const V & vec, const T & term, QueryTermSimple:
{
TermFieldMatchData dummy;
SearchContextPtr sc = getSearch(vec, term, termType);
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = sc->createIterator(&dummy, true);
ResultSetPtr rs = performSearch(*sb, vec.getNumDocs());
return rs;
@@ -495,7 +496,7 @@ SearchContextTest::testFind(const PostingList<V, T> & pl)
{
{ // strict search iterator
SearchContextPtr sc = getSearch(pl.getAttribute(), pl.getValue());
- sc->fetchPostings(true);
+ sc->fetchPostings(queryeval::ExecuteInfo::TRUE);
TermFieldMatchData dummy;
SearchBasePtr sb = sc->createIterator(&dummy, true);
ResultSetPtr rs = performSearch(*sb, pl.getAttribute().getNumDocs());
@@ -624,7 +625,7 @@ public:
~Verifier() override;
SearchIterator::UP
create(bool strict) const override {
- _sc->fetchPostings(strict);
+ _sc->fetchPostings(queryeval::ExecuteInfo(strict, 1.0));
auto search = _sc->createIterator(&_dummy, strict);
if (_withElementId) {
search = std::make_unique<attribute::ElementIterator>(std::move(search), *_sc, _dummy);
@@ -741,7 +742,7 @@ SearchContextTest::testStrictSearchIterator(SearchContext & threeHits,
{
TermFieldMatchData dummy;
{ // search for value with 3 hits
- threeHits.fetchPostings(true);
+ threeHits.fetchPostings(queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = threeHits.createIterator(&dummy, true);
sb->initRange(1, threeHits.attribute().getCommittedDocIdLimit());
EXPECT_TRUE(typeTester.matches(*sb));
@@ -762,7 +763,7 @@ SearchContextTest::testStrictSearchIterator(SearchContext & threeHits,
}
{ // search for value with no hits
- noHits.fetchPostings(true);
+ noHits.fetchPostings(queryeval::ExecuteInfo::TRUE);
SearchBasePtr sb = noHits.createIterator(&dummy, true);
sb->initRange(1, noHits.attribute().getCommittedDocIdLimit());
ASSERT_TRUE(typeTester.matches(*sb));
@@ -780,7 +781,7 @@ SearchContextTest::testNonStrictSearchIterator(SearchContext & threeHits,
{
TermFieldMatchData dummy;
{ // search for value with three hits
- threeHits.fetchPostings(false);
+ threeHits.fetchPostings(queryeval::ExecuteInfo::FALSE);
SearchBasePtr sb = threeHits.createIterator(&dummy, false);
sb->initRange(1, threeHits.attribute().getCommittedDocIdLimit());
EXPECT_TRUE(typeTester.matches(*sb));
@@ -798,7 +799,7 @@ SearchContextTest::testNonStrictSearchIterator(SearchContext & threeHits,
EXPECT_TRUE(sb->getDocId() == 5u || sb->isAtEnd());
}
{ // search for value with no hits
- noHits.fetchPostings(false);
+ noHits.fetchPostings(queryeval::ExecuteInfo::FALSE);
SearchBasePtr sb = noHits.createIterator(&dummy, false);
sb->initRange(1, threeHits.attribute().getCommittedDocIdLimit());
diff --git a/searchlib/src/tests/diskindex/diskindex/diskindex_test.cpp b/searchlib/src/tests/diskindex/diskindex/diskindex_test.cpp
index d34f824d094..243c24f6ab5 100644
--- a/searchlib/src/tests/diskindex/diskindex/diskindex_test.cpp
+++ b/searchlib/src/tests/diskindex/diskindex/diskindex_test.cpp
@@ -269,13 +269,13 @@ Test::requireThatBlueprintCanCreateSearchIterators()
SearchIterator::UP s;
{ // bit vector due to isFilter
b = _index->createBlueprint(_requestContext, FieldSpec("f2", 0, 0, true), makeTerm("w2"));
- b->fetchPostings(true);
+ b->fetchPostings(queryeval::ExecuteInfo::TRUE);
s = (dynamic_cast<LeafBlueprint *>(b.get()))->createLeafSearch(mda, true);
EXPECT_TRUE(dynamic_cast<BitVectorIterator *>(s.get()) != NULL);
}
{ // bit vector due to no ranking needed
b = _index->createBlueprint(_requestContext, FieldSpec("f2", 0, 0, false), makeTerm("w2"));
- b->fetchPostings(true);
+ b->fetchPostings(queryeval::ExecuteInfo::TRUE);
s = (dynamic_cast<LeafBlueprint *>(b.get()))->createLeafSearch(mda, true);
EXPECT_FALSE(dynamic_cast<BitVectorIterator *>(s.get()) != NULL);
TermFieldMatchData md2;
@@ -289,7 +289,7 @@ Test::requireThatBlueprintCanCreateSearchIterators()
{ // fake bit vector
b = _index->createBlueprint(_requestContext, FieldSpec("f1", 0, 0, true), makeTerm("w2"));
// std::cerr << "BP = " << typeid(*b).name() << std::endl;
- b->fetchPostings(true);
+ b->fetchPostings(queryeval::ExecuteInfo::TRUE);
s = (dynamic_cast<LeafBlueprint *>(b.get()))->createLeafSearch(mda, true);
// std::cerr << "SI = " << typeid(*s).name() << std::endl;
EXPECT_TRUE((dynamic_cast<BooleanMatchIteratorWrapper *>(s.get()) != NULL) ||
@@ -297,18 +297,15 @@ Test::requireThatBlueprintCanCreateSearchIterators()
}
{ // posting list iterator
b = _index->createBlueprint(_requestContext, FieldSpec("f1", 0, 0), makeTerm("w1"));
- b->fetchPostings(true);
+ b->fetchPostings(queryeval::ExecuteInfo::TRUE);
s = (dynamic_cast<LeafBlueprint *>(b.get()))->createLeafSearch(mda, true);
ASSERT_TRUE((dynamic_cast<ZcRareWordPosOccIterator<true, false> *>(s.get()) != NULL));
}
}
-Test::Test() :
- TestDiskIndex()
-{
-}
+Test::Test() = default;
-Test::~Test() {}
+Test::~Test() = default;
int
Test::Main()
diff --git a/searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp b/searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp
index 54124326507..71c7c93f756 100644
--- a/searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp
+++ b/searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp
@@ -2,9 +2,9 @@
#include <vespa/searchcommon/common/schema.h>
#include <vespa/searchlib/memoryindex/field_index.h>
-#include <vespa/searchlib/memoryindex/posting_iterator.h>
#include <vespa/searchlib/test/memoryindex/wrap_inserter.h>
#include <vespa/searchlib/test/searchiteratorverifier.h>
+#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/log/log.h>
diff --git a/searchlib/src/tests/memoryindex/memory_index/memory_index_test.cpp b/searchlib/src/tests/memoryindex/memory_index/memory_index_test.cpp
index a320c4a0641..4bb0f91659a 100644
--- a/searchlib/src/tests/memoryindex/memory_index/memory_index_test.cpp
+++ b/searchlib/src/tests/memoryindex/memory_index/memory_index_test.cpp
@@ -181,7 +181,7 @@ verifyResult(const FakeResult &expect,
EXPECT_EQ(expect.inspect().size(), result->getState().estimate().estHits);
EXPECT_EQ(expect.inspect().empty(), result->getState().estimate().empty);
- result->fetchPostings(true);
+ result->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchIterator::UP search = result->createSearch(*match_data, true);
bool valid_search = search.get() != 0;
EXPECT_TRUE(valid_search);
@@ -452,7 +452,7 @@ TEST(MemoryIndexTest, require_that_we_can_fake_bit_vector)
Blueprint::UP res = searchable.createBlueprint(requestContext, fields, makeTerm(foo));
EXPECT_TRUE(res.get() != NULL);
- res->fetchPostings(true);
+ res->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchIterator::UP search = res->createSearch(*match_data, true);
EXPECT_TRUE(search.get() != NULL);
EXPECT_TRUE(dynamic_cast<BooleanMatchIteratorWrapper *>(search.get()) != NULL);
diff --git a/searchlib/src/tests/nearsearch/nearsearch_test.cpp b/searchlib/src/tests/nearsearch/nearsearch_test.cpp
index ce4864a4326..cb17ea35cf8 100644
--- a/searchlib/src/tests/nearsearch/nearsearch_test.cpp
+++ b/searchlib/src/tests/nearsearch/nearsearch_test.cpp
@@ -61,7 +61,7 @@ MyTerm::MyTerm(const std::set<uint32_t> &doc, const std::set<uint32_t> &pos)
: _docs(doc),
_data(pos)
{}
-MyTerm::~MyTerm() {}
+MyTerm::~MyTerm() = default;
class MyQuery {
private:
@@ -230,7 +230,7 @@ Test::testNearSearch(MyQuery &query, uint32_t matchId)
}
search::fef::MatchData::UP md(layout.createMatchData());
- bp->fetchPostings(true);
+ bp->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
search::queryeval::SearchIterator::UP near = bp->createSearch(*md, true);
near->initFullRange();
bool foundMatch = false;
diff --git a/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp b/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp
index 72a686fddda..6625a4a09ce 100644
--- a/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp
+++ b/searchlib/src/tests/queryeval/blueprint/blueprint_test.cpp
@@ -188,7 +188,7 @@ public:
SearchIterator::UP
Test::create(const Blueprint &blueprint)
{
- const_cast<Blueprint &>(blueprint).fetchPostings(true);
+ const_cast<Blueprint &>(blueprint).fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search = blueprint.createSearch(*_md, true);
MySearch::verifyAndInfer(search.get(), *_md);
return search;
diff --git a/searchlib/src/tests/queryeval/blueprint/intermediate_blueprints_test.cpp b/searchlib/src/tests/queryeval/blueprint/intermediate_blueprints_test.cpp
index 9be238edba9..73e523b3df5 100644
--- a/searchlib/src/tests/queryeval/blueprint/intermediate_blueprints_test.cpp
+++ b/searchlib/src/tests/queryeval/blueprint/intermediate_blueprints_test.cpp
@@ -1047,7 +1047,7 @@ TEST("test WeakAnd Blueprint") {
wa.addTerm(Blueprint::UP(new FakeBlueprint(field, z)), 140);
wa.addTerm(Blueprint::UP(new FakeBlueprint(field, y)), 130);
{
- wa.fetchPostings(true);
+ wa.fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search = wa.createSearch(*md, true);
EXPECT_TRUE(dynamic_cast<WeakAndSearch*>(search.get()) != 0);
WeakAndSearch &s = dynamic_cast<WeakAndSearch&>(*search);
@@ -1069,7 +1069,7 @@ TEST("test WeakAnd Blueprint") {
EXPECT_EQUAL(0u, terms[2].maxScore); // NB: not set
}
{
- wa.fetchPostings(false);
+ wa.fetchPostings(ExecuteInfo::FALSE);
SearchIterator::UP search = wa.createSearch(*md, false);
EXPECT_TRUE(dynamic_cast<WeakAndSearch*>(search.get()) != 0);
EXPECT_TRUE(search->seek(1));
@@ -1099,7 +1099,7 @@ TEST("require_that_unpack_of_or_over_multisearch_is_optimized") {
addChild(std::move(child1)).
addChild(std::move(child2))));
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- top_up->fetchPostings(false);
+ top_up->fetchPostings(ExecuteInfo::FALSE);
EXPECT_EQUAL("search::queryeval::OrLikeSearch<false, search::queryeval::(anonymous namespace)::FullUnpack>",
top_up->createSearch(*md, false)->getClassName());
md->resolveTermField(2)->tagAsNotNeeded();
@@ -1125,7 +1125,7 @@ TEST("require_that_unpack_of_or_is_optimized") {
addChild(ap(MyLeafSpec(20).addField(2,2).create())).
addChild(ap(MyLeafSpec(10).addField(3,3).create()))));
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- top_up->fetchPostings(false);
+ top_up->fetchPostings(ExecuteInfo::FALSE);
EXPECT_EQUAL("search::queryeval::OrLikeSearch<false, search::queryeval::(anonymous namespace)::FullUnpack>",
top_up->createSearch(*md, false)->getClassName());
md->resolveTermField(2)->tagAsNotNeeded();
@@ -1144,7 +1144,7 @@ TEST("require_that_unpack_of_and_is_optimized") {
addChild(ap(MyLeafSpec(20).addField(2,2).create())).
addChild(ap(MyLeafSpec(10).addField(3,3).create()))));
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- top_up->fetchPostings(false);
+ top_up->fetchPostings(ExecuteInfo::FALSE);
EXPECT_EQUAL("search::queryeval::AndSearchNoStrict<search::queryeval::(anonymous namespace)::FullUnpack>",
top_up->createSearch(*md, false)->getClassName());
md->resolveTermField(2)->tagAsNotNeeded();
@@ -1164,7 +1164,7 @@ TEST("require_that_unpack_optimization_is_honoured_by_parents") {
addChild(ap(MyLeafSpec(20).addField(2,2).create())).
addChild(ap(MyLeafSpec(10).addField(3,3).create()))))));
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- top_up->fetchPostings(false);
+ top_up->fetchPostings(ExecuteInfo::FALSE);
EXPECT_EQUAL("search::queryeval::AndSearchNoStrict<search::queryeval::(anonymous namespace)::FullUnpack>",
top_up->createSearch(*md, false)->getClassName());
md->resolveTermField(2)->tagAsNotNeeded();
@@ -1213,7 +1213,7 @@ TEST("require that children does not optimize when parents refuse them to") {
FieldSpec("f2", 2, idxth21), makeTerm("w2")),
1.0)));
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- top_up->fetchPostings(false);
+ top_up->fetchPostings(ExecuteInfo::FALSE);
SearchIterator::UP search = top_up->createSearch(*md, true);
EXPECT_EQUAL("search::queryeval::EquivImpl<true>", search->getClassName());
{
@@ -1251,7 +1251,7 @@ TEST("require_that_unpack_optimization_is_overruled_by_equiv") {
addChild(ap(MyLeafSpec(10).addField(3,idxth3).create()))),
1.0)));
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- top_up->fetchPostings(false);
+ top_up->fetchPostings(ExecuteInfo::FALSE);
SearchIterator::UP search = top_up->createSearch(*md, true);
EXPECT_EQUAL("search::queryeval::EquivImpl<true>", search->getClassName());
{
diff --git a/searchlib/src/tests/queryeval/blueprint/leaf_blueprints_test.cpp b/searchlib/src/tests/queryeval/blueprint/leaf_blueprints_test.cpp
index 2209ab0bfec..d816e799b59 100644
--- a/searchlib/src/tests/queryeval/blueprint/leaf_blueprints_test.cpp
+++ b/searchlib/src/tests/queryeval/blueprint/leaf_blueprints_test.cpp
@@ -27,7 +27,7 @@ Test::testEmptyBlueprint()
EXPECT_EQUAL(1u, empty.getState().field(0).getFieldId());
EXPECT_EQUAL(11u, empty.getState().field(0).getHandle());
- empty.fetchPostings(true);
+ empty.fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search = empty.createSearch(*md, true);
SimpleResult res;
@@ -45,7 +45,7 @@ Test::testSimpleBlueprint()
SimpleBlueprint simple(a);
simple.tag("tag");
EXPECT_EQUAL("tag", simple.tag());
- simple.fetchPostings(true);
+ simple.fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search = simple.createSearch(*md, true);
SimpleResult res;
@@ -67,7 +67,7 @@ Test::testFakeBlueprint()
TermFieldHandle handle = 0;
FakeBlueprint orig(FieldSpec("<field>", fieldId, handle), fake);
- orig.fetchPostings(true);
+ orig.fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP search = orig.createSearch(*md, true);
search->initFullRange();
EXPECT_TRUE(!search->seek(1u));
diff --git a/searchlib/src/tests/queryeval/blueprint/mysearch.h b/searchlib/src/tests/queryeval/blueprint/mysearch.h
index dbd73b6f40e..73abcce3dc4 100644
--- a/searchlib/src/tests/queryeval/blueprint/mysearch.h
+++ b/searchlib/src/tests/queryeval/blueprint/mysearch.h
@@ -1,8 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/searchlib/queryeval/blueprint.h>
#include <vespa/searchlib/queryeval/multisearch.h>
+#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/vespalib/objects/visit.hpp>
-#include <cassert>
namespace search::queryeval {
diff --git a/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp b/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp
index f1b6cd05772..7414e8b10f2 100644
--- a/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp
+++ b/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp
@@ -58,7 +58,7 @@ struct DP {
Node::UP node = createNode();
FieldSpecList fields = FieldSpecList().add(FieldSpec(field, fieldId, handle));
queryeval::Blueprint::UP bp = searchable.createBlueprint(requestContext, fields, *node);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP sb = bp->createSearch(*md, strict);
EXPECT_TRUE(dynamic_cast<DotProductSearch*>(sb.get()) != 0);
sb->initFullRange();
diff --git a/searchlib/src/tests/queryeval/equiv/equiv_test.cpp b/searchlib/src/tests/queryeval/equiv/equiv_test.cpp
index 5dac26fec22..ecd1c8cd218 100644
--- a/searchlib/src/tests/queryeval/equiv/equiv_test.cpp
+++ b/searchlib/src/tests/queryeval/equiv/equiv_test.cpp
@@ -50,7 +50,7 @@ Test::testEquiv()
bool strict = (i == 0);
TEST_STATE(strict ? "strict" : "non-strict");
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP search = bp->createSearch(*md, strict);
search->initFullRange();
diff --git a/searchlib/src/tests/queryeval/fake_searchable/fake_searchable_test.cpp b/searchlib/src/tests/queryeval/fake_searchable/fake_searchable_test.cpp
index 6fc75c8e696..cbad6de25bb 100644
--- a/searchlib/src/tests/queryeval/fake_searchable/fake_searchable_test.cpp
+++ b/searchlib/src/tests/queryeval/fake_searchable/fake_searchable_test.cpp
@@ -62,7 +62,7 @@ TEST_F(FakeSearchableTest, require_that_term_search_works) {
bool strict = (i == 0);
SCOPED_TRACE(strict ? "strict" : "non-strict");
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP search = bp->createSearch(*md, strict);
search->initFullRange();
@@ -116,7 +116,7 @@ TEST_F(FakeSearchableTest, require_that_phrase_search_works) {
bool strict = (i == 0);
SCOPED_TRACE(strict ? "strict" : "non-strict");
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP search = bp->createSearch(*md, strict);
search->initFullRange();
@@ -167,7 +167,7 @@ TEST_F(FakeSearchableTest, require_that_weigheted_set_search_works) {
bool strict = (i == 0);
SCOPED_TRACE(strict ? "strict" : "non-strict");
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP search = bp->createSearch(*md, strict);
search->initFullRange();
@@ -238,7 +238,7 @@ TEST_F(FakeSearchableTest, require_that_multi_field_search_works) {
bool strict = (i == 0);
SCOPED_TRACE(strict ? "strict" : "non-strict");
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP search = bp->createSearch(*md, strict);
search->initFullRange();
@@ -322,7 +322,7 @@ TEST_F(FakeSearchableTest, require_that_phrase_with_empty_child_works) {
bool strict = (i == 0);
SCOPED_TRACE(strict ? "strict" : "non-strict");
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP search = bp->createSearch(*md, strict);
search->initFullRange();
@@ -342,7 +342,7 @@ TEST_F(FakeSearchableTest, require_that_match_data_is_compressed_for_attributes)
fields.add(FieldSpec("attrfoo", 1, 1));
Blueprint::UP bp = source.createBlueprint(req_ctx, fields, termNode);
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(false);
+ bp->fetchPostings(ExecuteInfo::FALSE);
SearchIterator::UP search = bp->createSearch(*md, false);
search->initFullRange();
EXPECT_TRUE(search->seek(5));
@@ -369,7 +369,7 @@ TEST_F(FakeSearchableTest, require_that_relevant_data_can_be_obtained_from_fake_
fields.add(FieldSpec("attrfoo", 1, 1));
Blueprint::UP bp = source.createBlueprint(req_ctx, fields, termNode);
MatchData::UP md = MatchData::makeTestInstance(100, 10);
- bp->fetchPostings(false);
+ bp->fetchPostings(ExecuteInfo::FALSE);
SearchIterator::UP search = bp->createSearch(*md, false);
EXPECT_TRUE(bp->get_attribute_search_context() != nullptr);
const auto *attr_ctx = bp->get_attribute_search_context();
diff --git a/searchlib/src/tests/queryeval/parallel_weak_and/parallel_weak_and_test.cpp b/searchlib/src/tests/queryeval/parallel_weak_and/parallel_weak_and_test.cpp
index 607e6100f90..7926a518317 100644
--- a/searchlib/src/tests/queryeval/parallel_weak_and/parallel_weak_and_test.cpp
+++ b/searchlib/src/tests/queryeval/parallel_weak_and/parallel_weak_and_test.cpp
@@ -175,7 +175,7 @@ struct WandBlueprintSpec
Node::UP term = createNode();
Blueprint::UP bp = blueprint(searchable, field, *term);
MatchData::UP md(MatchData::makeTestInstance(1, 1));
- bp->fetchPostings(true);
+ bp->fetchPostings(ExecuteInfo::TRUE);
bp->setDocIdLimit(docIdLimit);
SearchIterator::UP sb = bp->createSearch(*md, true);
EXPECT_TRUE(dynamic_cast<ParallelWeakAndSearch*>(sb.get()) != 0);
@@ -190,7 +190,7 @@ struct WandBlueprintSpec
FakeResult search(Searchable &searchable, const std::string &field, const search::query::Node &term) const {
Blueprint::UP bp = blueprint(searchable, field, term);
MatchData::UP md(MatchData::makeTestInstance(1, 1));
- bp->fetchPostings(true);
+ bp->fetchPostings(ExecuteInfo::TRUE);
bp->setDocIdLimit(docIdLimit);
SearchIterator::UP sb = bp->createSearch(*md, true);
EXPECT_TRUE(dynamic_cast<ParallelWeakAndSearch*>(sb.get()) != 0);
diff --git a/searchlib/src/tests/queryeval/predicate/predicate_blueprint_test.cpp b/searchlib/src/tests/queryeval/predicate/predicate_blueprint_test.cpp
index c76873a50cd..28b0d103040 100644
--- a/searchlib/src/tests/queryeval/predicate/predicate_blueprint_test.cpp
+++ b/searchlib/src/tests/queryeval/predicate/predicate_blueprint_test.cpp
@@ -26,6 +26,7 @@ using search::query::Weight;
using search::queryeval::FieldSpecBase;
using search::queryeval::PredicateBlueprint;
using search::queryeval::SearchIterator;
+using search::queryeval::ExecuteInfo;
namespace {
@@ -137,7 +138,7 @@ TEST_F("require that blueprint can create search", Fixture) {
f.indexDocument(doc_id, annotations);
PredicateBlueprint blueprint(f.field, f.guard(), f.query);
- blueprint.fetchPostings(true);
+ blueprint.fetchPostings(ExecuteInfo::TRUE);
TermFieldMatchDataArray tfmda;
SearchIterator::UP it = blueprint.createLeafSearch(tfmda, true);
ASSERT_TRUE(it.get());
@@ -161,7 +162,7 @@ TEST_F("require that blueprint can create more advanced search", Fixture) {
f.indexEmptyDocument(doc_id + 2);
PredicateBlueprint blueprint(f.field, f.guard(), f.query);
- blueprint.fetchPostings(true);
+ blueprint.fetchPostings(ExecuteInfo::TRUE);
TermFieldMatchDataArray tfmda;
SearchIterator::UP it = blueprint.createLeafSearch(tfmda, true);
ASSERT_TRUE(it.get());
@@ -184,7 +185,7 @@ TEST_F("require that blueprint can create NOT search", Fixture) {
f.indexDocument(doc_id, annotations);
PredicateBlueprint blueprint(f.field, f.guard(), f.query);
- blueprint.fetchPostings(true);
+ blueprint.fetchPostings(ExecuteInfo::TRUE);
TermFieldMatchDataArray tfmda;
SearchIterator::UP it = blueprint.createLeafSearch(tfmda, true);
ASSERT_TRUE(it.get());
@@ -200,7 +201,7 @@ TEST_F("require that blueprint can create compressed NOT search", Fixture) {
f.indexDocument(doc_id, annotations);
PredicateBlueprint blueprint(f.field, f.guard(), f.query);
- blueprint.fetchPostings(true);
+ blueprint.fetchPostings(ExecuteInfo::TRUE);
TermFieldMatchDataArray tfmda;
SearchIterator::UP it = blueprint.createLeafSearch(tfmda, true);
ASSERT_TRUE(it.get());
@@ -224,7 +225,7 @@ TEST_F("require that blueprint can set up search with subqueries", Fixture) {
query.getTerm()->addFeature("key2", "value", 2);
PredicateBlueprint blueprint(f.field, f.guard(), query);
- blueprint.fetchPostings(true);
+ blueprint.fetchPostings(ExecuteInfo::TRUE);
TermFieldMatchDataArray tfmda;
SearchIterator::UP it = blueprint.createLeafSearch(tfmda, true);
ASSERT_TRUE(it.get());
diff --git a/searchlib/src/tests/queryeval/queryeval.cpp b/searchlib/src/tests/queryeval/queryeval.cpp
index 56c6f7e1282..26e7095dd60 100644
--- a/searchlib/src/tests/queryeval/queryeval.cpp
+++ b/searchlib/src/tests/queryeval/queryeval.cpp
@@ -225,7 +225,7 @@ TEST("testAnd") {
auto and_b = std::make_unique<AndBlueprint>();
and_b->addChild(std::make_unique<SimpleBlueprint>(a));
and_b->addChild(std::make_unique<SimpleBlueprint>(b));
- and_b->fetchPostings(true);
+ and_b->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP and_ab = and_b->createSearch(*md, true);
EXPECT_TRUE(dynamic_cast<const AndSearch *>(and_ab.get()) != nullptr);
@@ -252,7 +252,7 @@ TEST("testOr") {
auto or_b = std::make_unique<OrBlueprint>();
or_b->addChild(std::make_unique<SimpleBlueprint>(a));
or_b->addChild(std::make_unique<SimpleBlueprint>(b));
- or_b->fetchPostings(true);
+ or_b->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP or_ab = or_b->createSearch(*md, true);
SimpleResult res;
@@ -366,7 +366,7 @@ TEST("testAndNot") {
auto andnot_b = std::make_unique<AndNotBlueprint>();
andnot_b->addChild(std::make_unique<SimpleBlueprint>(a));
andnot_b->addChild(std::make_unique<SimpleBlueprint>(b));
- andnot_b->fetchPostings(true);
+ andnot_b->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP andnot_ab = andnot_b->createSearch(*md, true);
SimpleResult res;
@@ -386,7 +386,7 @@ TEST("testAndNot") {
auto andnot_b = std::make_unique<AndNotBlueprint>();
andnot_b->addChild(std::make_unique<SimpleBlueprint>(a));
andnot_b->addChild(std::make_unique<DummySingleValueBitNumericAttributeBlueprint>(b));
- andnot_b->fetchPostings(true);
+ andnot_b->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP andnot_ab = andnot_b->createSearch(*md, true);
SimpleResult res;
@@ -412,7 +412,7 @@ TEST("testAndNot") {
auto and_b = std::make_unique<AndBlueprint>();
and_b->addChild(std::make_unique<SimpleBlueprint>(c));
and_b->addChild(std::move(andnot_b));
- and_b->fetchPostings(true);
+ and_b->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP and_cab = and_b->createSearch(*md, true);
SimpleResult res;
@@ -437,7 +437,7 @@ TEST("testRank") {
auto rank_b = std::make_unique<RankBlueprint>();
rank_b->addChild(std::make_unique<SimpleBlueprint>(a));
rank_b->addChild(std::make_unique<SimpleBlueprint>(b));
- rank_b->fetchPostings(true);
+ rank_b->fetchPostings(ExecuteInfo::TRUE);
SearchIterator::UP rank_ab = rank_b->createSearch(*md, true);
SimpleResult res;
diff --git a/searchlib/src/tests/queryeval/same_element/same_element_test.cpp b/searchlib/src/tests/queryeval/same_element/same_element_test.cpp
index a4ca1ade999..378e16480b8 100644
--- a/searchlib/src/tests/queryeval/same_element/same_element_test.cpp
+++ b/searchlib/src/tests/queryeval/same_element/same_element_test.cpp
@@ -37,7 +37,7 @@ std::unique_ptr<SameElementBlueprint> make_blueprint(const std::vector<FakeResul
Blueprint::UP finalize(Blueprint::UP bp, bool strict) {
Blueprint::UP result = Blueprint::optimize(std::move(bp));
- result->fetchPostings(strict);
+ result->fetchPostings(ExecuteInfo::create(strict));
result->freeze();
return result;
}
diff --git a/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp b/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
index 0743ac8408d..abaae7e4333 100644
--- a/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
+++ b/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
@@ -138,12 +138,13 @@ public:
void
fetchPostings(bool useBlueprint)
{
+ ExecuteInfo execInfo = ExecuteInfo::create(_strict);
if (useBlueprint) {
- _phrase.fetchPostings(_strict);
+ _phrase.fetchPostings(execInfo);
return;
}
for (size_t i = 0; i < _children.size(); ++i) {
- _children[i]->fetchPostings(_strict);
+ _children[i]->fetchPostings(execInfo);
}
}
diff --git a/searchlib/src/tests/queryeval/sourceblender/sourceblender.cpp b/searchlib/src/tests/queryeval/sourceblender/sourceblender.cpp
index 2cd687ab23a..c02bea9c5df 100644
--- a/searchlib/src/tests/queryeval/sourceblender/sourceblender.cpp
+++ b/searchlib/src/tests/queryeval/sourceblender/sourceblender.cpp
@@ -73,7 +73,7 @@ TEST("test strictness") {
blend_b->addChild(std::move(a_b));
blend_b->addChild(std::move(b_b));
Blueprint::UP bp(blend_b);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP search = bp->createSearch(*md, strict);
search->initFullRange();
SearchIterator &blend = *search;
diff --git a/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp b/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
index 78195f19427..85d2f3f4a37 100644
--- a/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
+++ b/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
@@ -66,7 +66,7 @@ struct WS {
Node::UP node = createNode();
FieldSpecList fields = FieldSpecList().add(FieldSpec(field, fieldId, handle));
queryeval::Blueprint::UP bp = searchable.createBlueprint(requestContext, fields, *node);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP sb = bp->createSearch(*md, strict);
return (dynamic_cast<WeightedSetTermSearch*>(sb.get()) != 0);
}
@@ -77,7 +77,7 @@ struct WS {
Node::UP node = createNode();
FieldSpecList fields = FieldSpecList().add(FieldSpec(field, fieldId, handle));
queryeval::Blueprint::UP bp = searchable.createBlueprint(requestContext, fields, *node);
- bp->fetchPostings(strict);
+ bp->fetchPostings(ExecuteInfo::create(strict));
SearchIterator::UP sb = bp->createSearch(*md, strict);
sb->initFullRange();
FakeResult result;
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
index 29298a05d6e..d8e9c442940 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp
@@ -139,8 +139,8 @@ public:
}
void
- fetchPostings(bool strict) override {
- _search_context->fetchPostings(strict);
+ fetchPostings(const queryeval::ExecuteInfo &execInfo) override {
+ _search_context->fetchPostings(execInfo);
}
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
@@ -219,9 +219,9 @@ public:
}
}
- void fetchPostings(bool strict) override {
+ void fetchPostings(const queryeval::ExecuteInfo &execInfo) override {
for (size_t i(0); i < _rangeSearches.size(); i++) {
- _rangeSearches[i]->fetchPostings(strict);
+ _rangeSearches[i]->fetchPostings(execInfo);
}
}
};
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp
index 9195ce30c6e..9f9d5535014 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.cpp
@@ -178,11 +178,11 @@ AttributeWeightedSetBlueprint::createLeafSearch(const fef::TermFieldMatchDataArr
}
void
-AttributeWeightedSetBlueprint::fetchPostings(bool strict)
+AttributeWeightedSetBlueprint::fetchPostings(const queryeval::ExecuteInfo &execInfo)
{
- if (strict) {
+ if (execInfo.isStrict()) {
for (auto * context : _contexts) {
- context->fetchPostings(true);
+ context->fetchPostings(execInfo);
}
}
}
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h
index d66a544e77a..6af3405c91d 100644
--- a/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h
+++ b/searchlib/src/vespa/searchlib/attribute/attribute_weighted_set_blueprint.h
@@ -29,7 +29,7 @@ public:
~AttributeWeightedSetBlueprint();
void addToken(std::unique_ptr<ISearchContext> context, int32_t weight);
queryeval::SearchIterator::UP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool strict) const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const queryeval::ExecuteInfo &execInfo) override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
};
diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
index 4c060c5fab8..b043bb4aaf8 100644
--- a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
@@ -526,9 +526,9 @@ createFilterIterator(fef::TermFieldMatchData *matchData, bool strict)
void
-AttributeVector::SearchContext::fetchPostings(bool strict) {
+AttributeVector::SearchContext::fetchPostings(const queryeval::ExecuteInfo &execInfo) {
if (_plsc != nullptr)
- _plsc->fetchPostings(strict);
+ _plsc->fetchPostings(execInfo);
}
diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.h b/searchlib/src/vespa/searchlib/attribute/attributevector.h
index 48ef8257329..b5f6beaa718 100644
--- a/searchlib/src/vespa/searchlib/attribute/attributevector.h
+++ b/searchlib/src/vespa/searchlib/attribute/attributevector.h
@@ -522,7 +522,7 @@ public:
unsigned int approximateHits() const override;
queryeval::SearchIterator::UP createIterator(fef::TermFieldMatchData *matchData, bool strict) override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const queryeval::ExecuteInfo &execInfo) override;
bool valid() const override { return false; }
Int64Range getAsIntegerTerm() const override { return Int64Range(); }
const QueryTermUCS4 * queryTerm() const override {
diff --git a/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.cpp b/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.cpp
index 28a270555d3..3b9f3d6f47c 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.cpp
@@ -39,9 +39,8 @@ EnumHintSearchContext::lookupRange(const datastore::EntryComparator &low,
}
void
-EnumHintSearchContext::fetchPostings(bool strict)
+EnumHintSearchContext::fetchPostings(const queryeval::ExecuteInfo &)
{
- (void) strict;
}
SearchIterator::UP
diff --git a/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.h b/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.h
index 5a20318ae7b..b83ea2e6c46 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.h
+++ b/searchlib/src/vespa/searchlib/attribute/enumhintsearchcontext.h
@@ -28,7 +28,7 @@ protected:
EnumHintSearchContext(const IEnumStoreDictionary &dictionary,
uint32_t docIdLimit,
uint64_t numValues);
- ~EnumHintSearchContext();
+ ~EnumHintSearchContext() override;
void lookupTerm(const datastore::EntryComparator &comp);
void lookupRange(const datastore::EntryComparator &low, const datastore::EntryComparator &high);
@@ -36,7 +36,7 @@ protected:
queryeval::SearchIterator::UP
createPostingIterator(fef::TermFieldMatchData *matchData, bool strict) override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const queryeval::ExecuteInfo & execInfo) override;
unsigned int approximateHits() const override;
};
diff --git a/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp b/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp
index 49ae5209aa0..0251e9c945c 100644
--- a/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/imported_search_context.cpp
@@ -7,6 +7,7 @@
#include <vespa/searchlib/common/bitvectoriterator.h>
#include <vespa/searchlib/query/query_term_ucs4.h>
#include <vespa/searchlib/queryeval/emptysearch.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
#include "attributeiterators.hpp"
#include <vespa/log/log.h>
@@ -230,12 +231,12 @@ ImportedSearchContext::considerAddSearchCacheEntry()
}
}
-void ImportedSearchContext::fetchPostings(bool strict) {
+void ImportedSearchContext::fetchPostings(const queryeval::ExecuteInfo &execInfo) {
assert(!_fetchPostingsDone);
_fetchPostingsDone = true;
if (!_searchCacheLookup) {
- _target_search_context->fetchPostings(strict);
- if (strict || _target_attribute.getIsFastSearch()) {
+ _target_search_context->fetchPostings(execInfo);
+ if (execInfo.isStrict() || _target_attribute.getIsFastSearch()) {
makeMergedPostings(_target_attribute.getIsFilter());
considerAddSearchCacheEntry();
}
diff --git a/searchlib/src/vespa/searchlib/attribute/imported_search_context.h b/searchlib/src/vespa/searchlib/attribute/imported_search_context.h
index 2ceb61bc2b2..2663978c99a 100644
--- a/searchlib/src/vespa/searchlib/attribute/imported_search_context.h
+++ b/searchlib/src/vespa/searchlib/attribute/imported_search_context.h
@@ -56,7 +56,7 @@ public:
std::unique_ptr<queryeval::SearchIterator>
createIterator(fef::TermFieldMatchData* matchData, bool strict) override;
unsigned int approximateHits() const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const queryeval::ExecuteInfo &execInfo) override;
bool valid() const override;
Int64Range getAsIntegerTerm() const override;
const QueryTermUCS4 * queryTerm() const override;
diff --git a/searchlib/src/vespa/searchlib/attribute/ipostinglistsearchcontext.h b/searchlib/src/vespa/searchlib/attribute/ipostinglistsearchcontext.h
index 097cc35d8cb..674b2fcc8c7 100644
--- a/searchlib/src/vespa/searchlib/attribute/ipostinglistsearchcontext.h
+++ b/searchlib/src/vespa/searchlib/attribute/ipostinglistsearchcontext.h
@@ -4,7 +4,10 @@
#include <memory>
-namespace search::queryeval { class SearchIterator; }
+namespace search::queryeval {
+ class SearchIterator;
+ class ExecuteInfo;
+}
namespace search::fef { class TermFieldMatchData; }
namespace search::attribute {
@@ -25,7 +28,7 @@ protected:
virtual ~IPostingListSearchContext() { }
public:
- virtual void fetchPostings(bool strict) = 0;
+ virtual void fetchPostings(const queryeval::ExecuteInfo & execInfo) = 0;
virtual std::unique_ptr<queryeval::SearchIterator> createPostingIterator(fef::TermFieldMatchData *matchData, bool strict) = 0;
virtual unsigned int approximateHits() const = 0;
};
diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h
index 78778e8085a..bd25cde4ff6 100644
--- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h
+++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h
@@ -116,14 +116,14 @@ protected:
PostingListSearchContextT(const Dictionary &dictionary, uint32_t docIdLimit, uint64_t numValues,
bool hasWeight, const PostingList &postingList, const IEnumStore &esb,
uint32_t minBvCocFreq, bool useBitVector, const ISearchContext &baseSearchCtx);
- ~PostingListSearchContextT();
+ ~PostingListSearchContextT() override;
void lookupSingle();
size_t countHits() const;
void fillArray();
void fillBitVector();
- void fetchPostings(bool strict) override;
+ void fetchPostings(const queryeval::ExecuteInfo & strict) override;
// this will be called instead of the fetchPostings function in some cases
void diversify(bool forward, size_t wanted_hits, const IAttributeVector &diversity_attr,
size_t max_per_group, size_t cutoff_groups, bool cutoff_strict);
@@ -229,7 +229,7 @@ private:
? limit
: estimate;
}
- void fetchPostings(bool strict) override {
+ void fetchPostings(const queryeval::ExecuteInfo & execInfo) override {
if (params().diversityAttribute() != nullptr) {
bool forward = (this->getRangeLimit() > 0);
size_t wanted_hits = std::abs(this->getRangeLimit());
@@ -237,7 +237,7 @@ private:
*(params().diversityAttribute()), this->getMaxPerGroup(),
params().diversityCutoffGroups(), params().diversityCutoffStrict());
} else {
- PostingListSearchContextT<DataT>::fetchPostings(strict);
+ PostingListSearchContextT<DataT>::fetchPostings(execInfo);
}
}
@@ -267,7 +267,7 @@ PostingSearchContext(QueryTermSimpleUP qTerm, bool useBitVector, const AttrT &to
}
template <typename BaseSC, typename BaseSC2, typename AttrT>
-PostingSearchContext<BaseSC, BaseSC2, AttrT>::~PostingSearchContext() { }
+PostingSearchContext<BaseSC, BaseSC2, AttrT>::~PostingSearchContext() = default;
template <typename BaseSC, typename AttrT, typename DataT>
diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp
index ed6a4a06478..e60cd4f5887 100644
--- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp
@@ -6,10 +6,11 @@
#include "attributeiterators.h"
#include "diversity.h"
#include "postingstore.hpp"
+#include "posting_list_traverser.h"
#include <vespa/searchlib/queryeval/emptysearch.h>
+#include <vespa/searchlib/queryeval/executeinfo.h>
#include <vespa/searchlib/common/bitvectoriterator.h>
#include <vespa/searchlib/common/growablebitvector.h>
-#include "posting_list_traverser.h"
using search::queryeval::EmptySearch;
@@ -113,7 +114,7 @@ PostingListSearchContextT<DataT>::fillBitVector()
template <typename DataT>
void
-PostingListSearchContextT<DataT>::fetchPostings(bool strict)
+PostingListSearchContextT<DataT>::fetchPostings(const queryeval::ExecuteInfo & execInfo)
{
if (_fetchPostingsDone) return;
@@ -121,7 +122,7 @@ PostingListSearchContextT<DataT>::fetchPostings(bool strict)
if (_uniqueValues < 2u) return;
- if (strict && !fallbackToFiltering()) {
+ if (execInfo.isStrict() && !fallbackToFiltering()) {
size_t sum(countHits());
if (sum < _docIdLimit / 64) {
_merger.reserveArray(_uniqueValues, sum);
diff --git a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp
index bb930e303b6..e1277653b83 100644
--- a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp
@@ -127,7 +127,7 @@ public:
std::unique_ptr<queryeval::SearchIterator>
createFilterIterator(fef::TermFieldMatchData * matchData, bool strict) override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const queryeval::ExecuteInfo &execInfo) override;
std::unique_ptr<queryeval::SearchIterator> createPostingIterator(fef::TermFieldMatchData *matchData, bool strict) override;
unsigned int approximateHits() const override;
};
@@ -157,8 +157,8 @@ BitVectorSearchContext::createFilterIterator(fef::TermFieldMatchData * matchData
}
void
-BitVectorSearchContext::fetchPostings(bool strict) {
- (void) strict;
+BitVectorSearchContext::fetchPostings(const queryeval::ExecuteInfo &execInfo) {
+ (void) execInfo;
}
std::unique_ptr<queryeval::SearchIterator>
diff --git a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp
index 194aea5344b..4febe165665 100644
--- a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp
+++ b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.cpp
@@ -66,9 +66,9 @@ areAnyParentsEquiv(const Blueprint * node)
}
void
-DiskTermBlueprint::fetchPostings(bool strict)
+DiskTermBlueprint::fetchPostings(const queryeval::ExecuteInfo &execInfo)
{
- (void) strict;
+ (void) execInfo;
_hasEquivParent = areAnyParentsEquiv(getParent());
_bitVector = _diskIndex.readBitVector(*_lookupRes);
if (!_useBitVector || !_bitVector) {
diff --git a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h
index f3e9a29dca0..39ac27bc448 100644
--- a/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h
+++ b/searchlib/src/vespa/searchlib/diskindex/disktermblueprint.h
@@ -40,7 +40,7 @@ public:
// For now, this DiskTermBlueprint instance must have longer lifetime than the created iterator.
std::unique_ptr<queryeval::SearchIterator> createLeafSearch(const fef::TermFieldMatchDataArray & tfmda, bool strict) const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const queryeval::ExecuteInfo &execInfo) override;
};
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/CMakeLists.txt b/searchlib/src/vespa/searchlib/queryeval/CMakeLists.txt
index d8774d86edf..de2919443ff 100644
--- a/searchlib/src/vespa/searchlib/queryeval/CMakeLists.txt
+++ b/searchlib/src/vespa/searchlib/queryeval/CMakeLists.txt
@@ -12,6 +12,7 @@ vespa_add_library(searchlib_queryeval OBJECT
emptysearch.cpp
equiv_blueprint.cpp
equivsearch.cpp
+ executeinfo.cpp
fake_requestcontext.cpp
fake_result.cpp
fake_search.cpp
diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
index 1019ef9dd68..0a4d10742f7 100644
--- a/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.cpp
@@ -3,7 +3,7 @@
#include "blueprint.h"
#include "leaf_blueprints.h"
#include "intermediate_blueprints.h"
-#include "equiv_blueprint.h"
+#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/vespalib/objects/visit.hpp>
#include <vespa/vespalib/objects/objectdumper.h>
#include <vespa/vespalib/objects/object2slime.h>
@@ -403,11 +403,11 @@ IntermediateBlueprint::visitMembers(vespalib::ObjectVisitor &visitor) const
}
void
-IntermediateBlueprint::fetchPostings(bool strict)
+IntermediateBlueprint::fetchPostings(const ExecuteInfo &execInfo)
{
for (size_t i = 0; i < _children.size(); ++i) {
- bool strictChild = (strict && inheritStrict(i));
- _children[i]->fetchPostings(strictChild);
+ ExecuteInfo childInfo = ExecuteInfo(execInfo.isStrict() && inheritStrict(i), execInfo.hitRate());
+ _children[i]->fetchPostings(childInfo);
}
}
@@ -494,9 +494,9 @@ LeafBlueprint::LeafBlueprint(const FieldSpecBaseList &fields, bool allow_termwis
LeafBlueprint::~LeafBlueprint() = default;
void
-LeafBlueprint::fetchPostings(bool strict)
+LeafBlueprint::fetchPostings(const ExecuteInfo &execInfo)
{
- (void) strict;
+ (void) execInfo;
}
void
diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.h b/searchlib/src/vespa/searchlib/queryeval/blueprint.h
index 383e63a2edd..842cd7f30ea 100644
--- a/searchlib/src/vespa/searchlib/queryeval/blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.h
@@ -4,10 +4,11 @@
#include "field_spec.h"
#include "unpackinfo.h"
+#include "executeinfo.h"
#include <vespa/searchlib/fef/handle.h>
#include <vespa/searchlib/fef/matchdata.h>
#include <vespa/searchlib/fef/termfieldmatchdata.h>
-#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
+#include <cassert>
namespace vespalib { class ObjectVisitor; }
namespace vespalib::slime {
@@ -15,10 +16,12 @@ namespace vespalib::slime {
struct Inserter;
}
namespace search::attribute { class ISearchContext; }
+namespace search::fef { class TermFieldMatchDataArray; }
namespace search::queryeval {
class SearchIterator;
+class ExecuteInfo;
/**
* A Blueprint is an intermediate representation of a search. More
@@ -186,7 +189,7 @@ public:
double hit_ratio() const { return getState().hit_ratio(_docid_limit); }
- virtual void fetchPostings(bool strict) = 0;
+ virtual void fetchPostings(const ExecuteInfo &execInfo) = 0;
virtual void freeze() = 0;
bool frozen() const { return _frozen; }
@@ -288,7 +291,7 @@ public:
bool strict, fef::MatchData &md) const = 0;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
void freeze() override final;
UnpackInfo calculateUnpackInfo(const fef::MatchData & md) const;
@@ -313,7 +316,7 @@ public:
~LeafBlueprint() override;
const State &getState() const override final { return _state; }
void setDocIdLimit(uint32_t limit) override final { Blueprint::setDocIdLimit(limit); }
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
void freeze() override final;
SearchIteratorUP createSearch(fef::MatchData &md, bool strict) const override;
diff --git a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp
index f76cd0d6acc..d8bb31525e9 100644
--- a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp
@@ -64,11 +64,11 @@ DotProductBlueprint::createLeafSearch(const search::fef::TermFieldMatchDataArray
}
void
-DotProductBlueprint::fetchPostings(bool strict)
+DotProductBlueprint::fetchPostings(const ExecuteInfo &execInfo)
{
- (void) strict;
+ ExecuteInfo childInfo(true, execInfo.hitRate());
for (size_t i = 0; i < _terms.size(); ++i) {
- _terms[i]->fetchPostings(true);
+ _terms[i]->fetchPostings(childInfo);
}
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h
index e19a6cdb7f9..86c8e90300a 100644
--- a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h
@@ -34,7 +34,7 @@ public:
bool strict) const override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
};
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.cpp
index bdd64f4c938..8e067596adf 100644
--- a/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.cpp
@@ -47,10 +47,10 @@ EquivBlueprint::visitMembers(vespalib::ObjectVisitor &visitor) const
}
void
-EquivBlueprint::fetchPostings(bool strict)
+EquivBlueprint::fetchPostings(const ExecuteInfo &execInfo)
{
for (size_t i = 0; i < _terms.size(); ++i) {
- _terms[i]->fetchPostings(strict);
+ _terms[i]->fetchPostings(execInfo);
}
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.h
index 09a41ab13df..59ed5ad5d3d 100644
--- a/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/equiv_blueprint.h
@@ -27,7 +27,7 @@ public:
SearchIteratorUP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool strict) const override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
bool isEquiv() const override { return true; }
};
diff --git a/searchlib/src/vespa/searchlib/queryeval/executeinfo.cpp b/searchlib/src/vespa/searchlib/queryeval/executeinfo.cpp
new file mode 100644
index 00000000000..b549876435f
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/queryeval/executeinfo.cpp
@@ -0,0 +1,15 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "executeinfo.h"
+
+namespace search::queryeval {
+
+const ExecuteInfo ExecuteInfo::TRUE(true, 1.0);
+const ExecuteInfo ExecuteInfo::FALSE(true, 1.0);
+
+ExecuteInfo
+ExecuteInfo::create(bool strict) {
+ return ExecuteInfo(strict, 1.0);
+}
+
+}
diff --git a/searchlib/src/vespa/searchlib/queryeval/executeinfo.h b/searchlib/src/vespa/searchlib/queryeval/executeinfo.h
new file mode 100644
index 00000000000..4f2b9ecab98
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/queryeval/executeinfo.h
@@ -0,0 +1,27 @@
+// Copyright 2019 Oath inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+namespace search::queryeval {
+
+ /**
+ * Holds information about how query will be executed and how large part of corpus will pass through.
+ * @author baldersheim
+ */
+class ExecuteInfo {
+public:
+ ExecuteInfo(bool strict, float hitRate_in)
+ : _hitRate(hitRate_in),
+ _strict(strict)
+ { }
+ bool isStrict() const { return _strict; }
+ float hitRate() const { return _hitRate; }
+ static const ExecuteInfo TRUE;
+ static const ExecuteInfo FALSE;
+ static ExecuteInfo create(bool strict);
+private:
+ float _hitRate;
+ bool _strict;
+};
+
+}
diff --git a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp
index 4fb1f44e156..94cec9a63c5 100644
--- a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp
@@ -87,7 +87,7 @@ struct FakeContext : attribute::ISearchContext {
}
unsigned int approximateHits() const override { return 0; }
std::unique_ptr<SearchIterator> createIterator(fef::TermFieldMatchData *, bool) override { abort(); }
- void fetchPostings(bool) override { }
+ void fetchPostings(const ExecuteInfo &) override { }
bool valid() const override { return true; }
search::Int64Range getAsIntegerTerm() const override { abort(); }
const search::QueryTermUCS4 * queryTerm() const override { abort(); }
diff --git a/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp
index 6a844a6bec0..8be6263221a 100644
--- a/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp
@@ -3,6 +3,7 @@
#include "emptysearch.h"
#include "nearest_neighbor_blueprint.h"
#include "nearest_neighbor_iterator.h"
+#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/eval/tensor/dense/dense_tensor_view.h>
#include <vespa/searchlib/tensor/dense_tensor_attribute.h>
diff --git a/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.cpp
index 3fd08047922..805d3246460 100644
--- a/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.cpp
@@ -233,7 +233,7 @@ namespace {
}
-void PredicateBlueprint::fetchPostings(bool) {
+void PredicateBlueprint::fetchPostings(const ExecuteInfo &) {
const auto &interval_index = _index.getIntervalIndex();
const auto &bounds_index = _index.getBoundsIndex();
lookupPostingLists(_interval_dict_entries, _interval_vector_iterators,
diff --git a/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.h
index 16b725cd4b0..3c85978798a 100644
--- a/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/predicate_blueprint.h
@@ -47,7 +47,7 @@ public:
const query::PredicateQuery &query);
~PredicateBlueprint();
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
SearchIterator::UP
createLeafSearch(const fef::TermFieldMatchDataArray &tfmda,
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
index 8ca8ef0f102..fe4619b16db 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
@@ -54,10 +54,11 @@ SameElementBlueprint::optimize_self()
}
void
-SameElementBlueprint::fetchPostings(bool strict)
+SameElementBlueprint::fetchPostings(const ExecuteInfo &execInfo)
{
for (size_t i = 0; i < _terms.size(); ++i) {
- _terms[i]->fetchPostings(strict && (i == 0));
+ ExecuteInfo childInfo(execInfo.isStrict() && (i == 0), execInfo.hitRate());
+ _terms[i]->fetchPostings(childInfo);
}
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
index e6fe9f8929c..fc19abe4c5e 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
@@ -35,7 +35,7 @@ public:
void addTerm(Blueprint::UP term);
void optimize_self() override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
std::unique_ptr<SameElementSearch> create_same_element_search(bool strict) const;
SearchIteratorUP createLeafSearch(const search::fef::TermFieldMatchDataArray &tfmda,
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
index edb26fdb296..81e90c399ec 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
@@ -81,10 +81,10 @@ SimplePhraseBlueprint::createLeafSearch(const fef::TermFieldMatchDataArray &tfmd
void
-SimplePhraseBlueprint::fetchPostings(bool strict)
+SimplePhraseBlueprint::fetchPostings(const ExecuteInfo &execInfo)
{
for (auto & term : _terms) {
- term->fetchPostings(strict);
+ term->fetchPostings(execInfo);
}
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
index a09bc3f6c06..0fb1599d68f 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
@@ -36,7 +36,7 @@ public:
SearchIteratorUP
createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool strict) const override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
};
}
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 bf98a9f5880..a0010c7a8f0 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
@@ -103,10 +103,11 @@ ParallelWeakAndBlueprint::createLeafSearch(const search::fef::TermFieldMatchData
}
void
-ParallelWeakAndBlueprint::fetchPostings(bool)
+ParallelWeakAndBlueprint::fetchPostings(const ExecuteInfo & execInfo)
{
+ ExecuteInfo childInfo(true, execInfo.hitRate());
for (size_t i = 0; i < _terms.size(); ++i) {
- _terms[i]->fetchPostings(true);
+ _terms[i]->fetchPostings(childInfo);
}
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h
index 6bc4da64379..a59cdb8cbf5 100644
--- a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h
@@ -61,7 +61,7 @@ public:
SearchIterator::UP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool strict) const override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
bool always_needs_unpack() const override;
};
diff --git a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.cpp
index cec72129475..b603fd8fee4 100644
--- a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.cpp
@@ -56,11 +56,11 @@ WeightedSetTermBlueprint::createLeafSearch(const fef::TermFieldMatchDataArray &t
}
void
-WeightedSetTermBlueprint::fetchPostings(bool strict)
+WeightedSetTermBlueprint::fetchPostings(const ExecuteInfo &execInfo)
{
- (void) strict;
+ ExecuteInfo childInfo(true, execInfo.hitRate());
for (size_t i = 0; i < _terms.size(); ++i) {
- _terms[i]->fetchPostings(true);
+ _terms[i]->fetchPostings(childInfo);
}
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h
index 19e88466b1a..8ae42607a9d 100644
--- a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h
@@ -37,7 +37,7 @@ public:
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
private:
- void fetchPostings(bool strict) override;
+ void fetchPostings(const ExecuteInfo &execInfo) override;
};
}