// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "enumhintsearchcontext.h" #include "i_enum_store_dictionary.h" #include #include namespace search::attribute { using queryeval::SearchIterator; using fef::TermFieldMatchData; EnumHintSearchContext:: EnumHintSearchContext(const IEnumStoreDictionary &dictionary, uint32_t docIdLimit, uint64_t numValues) : _dict_snapshot(dictionary.get_read_snapshot()), _uniqueValues(0u), _docIdLimit(docIdLimit), _numValues(numValues) { } EnumHintSearchContext::~EnumHintSearchContext() = default; void EnumHintSearchContext::lookupTerm(const vespalib::datastore::EntryComparator &comp) { _uniqueValues = _dict_snapshot->count(comp); } void EnumHintSearchContext::lookupRange(const vespalib::datastore::EntryComparator &low, const vespalib::datastore::EntryComparator &high) { _uniqueValues = _dict_snapshot->count_in_range(low, high); } void EnumHintSearchContext::fetchPostings(const queryeval::ExecuteInfo &, bool) { } SearchIterator::UP EnumHintSearchContext::createPostingIterator(TermFieldMatchData *, bool ) { return (_uniqueValues == 0u) ? std::make_unique() : SearchIterator::UP(); } HitEstimate EnumHintSearchContext::calc_hit_estimate() const { return (_uniqueValues == 0u) ? HitEstimate(0u) : HitEstimate::unknown(std::max(uint64_t(_docIdLimit), _numValues)); } }