// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "search_context.h" #include "attributevector.h" #include "attributeiterators.hpp" #include "ipostinglistsearchcontext.h" #include using search::queryeval::SearchIterator; namespace search::attribute { HitEstimate SearchContext::calc_hit_estimate() const { if (_plsc != nullptr) { return _plsc->calc_hit_estimate(); } return HitEstimate::unknown(std::max(uint64_t(_attr.getNumDocs()), _attr.getStatus().getNumValues())); } std::unique_ptr SearchContext::createIterator(fef::TermFieldMatchData* matchData, bool strict) { if (_plsc != nullptr) { auto res = _plsc->createPostingIterator(matchData, strict); if (res) { return res; } } return createFilterIterator(matchData, strict); } std::unique_ptr SearchContext::createFilterIterator(fef::TermFieldMatchData* matchData, bool strict) { if (!valid()) { return std::make_unique(); } if (getIsFilter()) { return (strict ? std::make_unique>(*this, matchData) : std::make_unique>(*this, matchData)); } return (strict ? std::make_unique>(*this, matchData) : std::make_unique>(*this, matchData)); } void SearchContext::fetchPostings(const queryeval::ExecuteInfo& execInfo, bool strict) { if (_plsc != nullptr) { _plsc->fetchPostings(execInfo, strict); } } const vespalib::string& SearchContext::attributeName() const { return _attr.getName(); } bool SearchContext::getIsFilter() const { return _attr.getIsFilter(); } }