diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-12-06 09:50:59 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-12-06 09:50:59 +0000 |
commit | 3896913b204caf6aa2b5aa79892925a98cb604df (patch) | |
tree | 1f17534b4b476e9650fefab1d3eaec91e1215572 /searchcore | |
parent | ff4825c7d9c1e367ebd561fb83872ea757c5592c (diff) |
Wire in use-estimate-for-fetch-postings into ExecuteInfo.
Diffstat (limited to 'searchcore')
4 files changed, 10 insertions, 7 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp b/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp index 349d33e03e9..3a2383cfb2f 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/attribute_limiter.cpp @@ -99,7 +99,7 @@ AttributeLimiter::create_match_data(size_t want_hits, size_t max_group_size, dou FieldSpecList field; // single field API is protected field.add(FieldSpec(_attribute_name, my_field_id, my_handle)); _blueprint = _searchable_attributes.createBlueprint(_requestContext, field, node); - auto execInfo = ExecuteInfo::create(strictSearch, strictSearch ? 1.0F : hit_rate, &_requestContext.getDoom(), true); + auto execInfo = ExecuteInfo::create(strictSearch, strictSearch ? 1.0F : hit_rate, &_requestContext.getDoom(), true, true); _blueprint->fetchPostings(execInfo); _estimatedHits.store(_blueprint->getState().estimate().estHits, std::memory_order_relaxed); _blueprint->freeze(); diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp b/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp index ad1388f0407..7c8608985c3 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp @@ -17,6 +17,7 @@ using search::queryeval::IDiversifier; using search::attribute::diversity::DiversityFilter; using search::attribute::BasicType; using search::attribute::AttributeBlueprintParams; +using search::queryeval::ExecuteInfo; using vespalib::Issue; using namespace search::fef::indexproperties::matchphase; @@ -205,13 +206,15 @@ MatchToolsFactory(QueryLimiter & queryLimiter, trace.addEvent(4, "Perform dictionary lookups and posting lists initialization"); float hitRate = std::min(1.0F, float(maxNumHits)/float(searchContext.getDocIdLimit())); bool create_postinglist_when_non_strict = CreatePostingListWhenNonStrict::check(_queryEnv.getProperties(), rankSetup.create_postinglist_when_non_strict()); - _query.fetchPostings(search::queryeval::ExecuteInfo::create(is_search, hitRate, &_requestContext.getDoom(), - create_postinglist_when_non_strict)); + bool use_estimate_for_fetch_postings = UseEstimateForFetchPostings::check(_queryEnv.getProperties(), rankSetup.use_estimate_for_fetch_postings()); + _query.fetchPostings(ExecuteInfo::create(is_search, hitRate, &_requestContext.getDoom(), + create_postinglist_when_non_strict, use_estimate_for_fetch_postings)); if (is_search) { _query.handle_global_filter(_requestContext.getDoom(), searchContext.getDocIdLimit(), _attribute_blueprint_params.global_filter_lower_limit, _attribute_blueprint_params.global_filter_upper_limit, - thread_bundle, trace, create_postinglist_when_non_strict); + thread_bundle, trace, create_postinglist_when_non_strict, + use_estimate_for_fetch_postings); } _query.freeze(); trace.addEvent(5, "Prepare shared state for multi-threaded rank executors"); diff --git a/searchcore/src/vespa/searchcore/proton/matching/query.cpp b/searchcore/src/vespa/searchcore/proton/matching/query.cpp index de0a4846615..d9051ac09e7 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/query.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/query.cpp @@ -249,7 +249,7 @@ void Query::handle_global_filter(const vespalib::Doom & doom, uint32_t docid_limit, double global_filter_lower_limit, double global_filter_upper_limit, vespalib::ThreadBundle &thread_bundle, search::engine::Trace& trace, - bool create_postinglist_when_non_strict) + bool create_postinglist_when_non_strict, bool use_estimate_for_fetch_postings) { if (!handle_global_filter(*_blueprint, docid_limit, global_filter_lower_limit, global_filter_upper_limit, thread_bundle, &trace)) { return; @@ -259,7 +259,7 @@ Query::handle_global_filter(const vespalib::Doom & doom, uint32_t docid_limit, _blueprint = Blueprint::optimize(std::move(_blueprint)); LOG(debug, "blueprint after handle_global_filter:\n%s\n", _blueprint->asString().c_str()); // strictness may change if optimized order changed: - fetchPostings(ExecuteInfo::create(true, 1.0F, &doom, create_postinglist_when_non_strict)); + fetchPostings(ExecuteInfo::create(true, 1.0F, &doom, create_postinglist_when_non_strict, use_estimate_for_fetch_postings)); } bool diff --git a/searchcore/src/vespa/searchcore/proton/matching/query.h b/searchcore/src/vespa/searchcore/proton/matching/query.h index 3e2c7686066..c3ea2c5e664 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/query.h +++ b/searchcore/src/vespa/searchcore/proton/matching/query.h @@ -107,7 +107,7 @@ public: void handle_global_filter(const vespalib::Doom & doom, uint32_t docid_limit, double global_filter_lower_limit, double global_filter_upper_limit, vespalib::ThreadBundle &thread_bundle, search::engine::Trace& trace, - bool create_postinglist_when_non_strict); + bool create_postinglist_when_non_strict, bool use_estimate_for_fetch_postings); /** * Calculates and handles the global filter if needed by the blueprint tree. |