// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include "attributeguard.h" #include #include #include #include namespace search { namespace attribute { class ISearchContext; } class AttributeWeightedSetBlueprint : public queryeval::ComplexLeafBlueprint { private: using ISearchContext = attribute::ISearchContext; using IAttributeVector = attribute::IAttributeVector; using AttrHitEstimate = attribute::HitEstimate; size_t _numDocs; size_t _estHits; std::vector _weights; const IAttributeVector & _attr; std::vector _contexts; std::vector _estimates; public: AttributeWeightedSetBlueprint(const AttributeWeightedSetBlueprint &) = delete; AttributeWeightedSetBlueprint &operator=(const AttributeWeightedSetBlueprint &) = delete; AttributeWeightedSetBlueprint(const queryeval::FieldSpec &field, const IAttributeVector & attr); ~AttributeWeightedSetBlueprint(); void addToken(std::unique_ptr context, int32_t weight); void sort(queryeval::InFlow in_flow) override; queryeval::FlowStats calculate_flow_stats(uint32_t docid_limit) const override; queryeval::SearchIterator::UP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda) const override; queryeval::SearchIterator::UP createFilterSearch(FilterConstraint constraint) const override; void fetchPostings(const queryeval::ExecuteInfo &execInfo) override; void visitMembers(vespalib::ObjectVisitor &visitor) const override; }; } // namespace search