From ddbbf02d0598cd0dbd31bb71c57c7f0f2293f597 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Tue, 29 Mar 2022 19:20:46 +0200 Subject: Move SearchContext out from AttributeVector. --- .../tests/attribute/benchmark/attributesearcher.h | 7 +- .../tests/attribute/bitvector/bitvector_test.cpp | 3 +- .../enumeratedsave/enumeratedsave_test.cpp | 3 +- .../postinglistattribute_test.cpp | 3 +- .../reference_attribute_test.cpp | 1 + .../attribute/searchcontext/searchcontext_test.cpp | 6 +- .../stringattribute/stringattribute_test.cpp | 3 +- searchlib/src/tests/queryeval/queryeval.cpp | 2 +- .../src/vespa/searchlib/attribute/CMakeLists.txt | 1 + .../vespa/searchlib/attribute/attributevector.cpp | 61 +--------------- .../vespa/searchlib/attribute/attributevector.h | 56 ++------------- .../src/vespa/searchlib/attribute/attrvector.cpp | 2 +- .../src/vespa/searchlib/attribute/attrvector.h | 2 +- .../searchlib/attribute/extendableattributes.h | 16 ++--- .../vespa/searchlib/attribute/flagattribute.cpp | 2 +- .../src/vespa/searchlib/attribute/flagattribute.h | 2 +- .../searchlib/attribute/multinumericattribute.h | 7 +- .../searchlib/attribute/multinumericattribute.hpp | 6 +- .../attribute/multinumericenumattribute.h | 7 +- .../attribute/multinumericenumattribute.hpp | 2 +- .../attribute/multinumericpostattribute.h | 2 +- .../attribute/multinumericpostattribute.hpp | 4 +- .../searchlib/attribute/multistringattribute.h | 9 ++- .../searchlib/attribute/multistringattribute.hpp | 2 +- .../searchlib/attribute/multistringpostattribute.h | 2 +- .../attribute/multistringpostattribute.hpp | 4 +- .../attribute/not_implemented_attribute.cpp | 7 +- .../attribute/not_implemented_attribute.h | 2 +- .../searchlib/attribute/reference_attribute.cpp | 7 +- .../searchlib/attribute/reference_attribute.h | 2 +- .../vespa/searchlib/attribute/search_context.cpp | 81 ++++++++++++++++++++++ .../src/vespa/searchlib/attribute/search_context.h | 62 +++++++++++++++++ .../searchlib/attribute/singleboolattribute.cpp | 7 +- .../searchlib/attribute/singleboolattribute.h | 2 +- .../searchlib/attribute/singlenumericattribute.h | 5 +- .../searchlib/attribute/singlenumericattribute.hpp | 4 +- .../attribute/singlenumericenumattribute.h | 5 +- .../attribute/singlenumericenumattribute.hpp | 4 +- .../attribute/singlenumericpostattribute.h | 2 +- .../attribute/singlenumericpostattribute.hpp | 2 +- .../attribute/singlesmallnumericattribute.cpp | 4 +- .../attribute/singlesmallnumericattribute.h | 7 +- .../searchlib/attribute/singlestringattribute.h | 3 +- .../searchlib/attribute/singlestringattribute.hpp | 2 +- .../attribute/singlestringpostattribute.h | 2 +- .../attribute/singlestringpostattribute.hpp | 2 +- .../src/vespa/searchlib/attribute/stringbase.h | 3 +- 47 files changed, 241 insertions(+), 189 deletions(-) create mode 100644 searchlib/src/vespa/searchlib/attribute/search_context.cpp create mode 100644 searchlib/src/vespa/searchlib/attribute/search_context.h (limited to 'searchlib/src') diff --git a/searchlib/src/tests/attribute/benchmark/attributesearcher.h b/searchlib/src/tests/attribute/benchmark/attributesearcher.h index 3bf3d6e8fa5..43531b48f05 100644 --- a/searchlib/src/tests/attribute/benchmark/attributesearcher.h +++ b/searchlib/src/tests/attribute/benchmark/attributesearcher.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -130,7 +131,7 @@ AttributeFindSearcher::doRun() this->buildTermQuery(_query, _attrPtr->getName(), ss.str().data()); AttributeGuard guard(_attrPtr); - std::unique_ptr searchContext = + std::unique_ptr searchContext = _attrPtr->getSearch(vespalib::stringref(&_query[0], _query.size()), attribute::SearchContextParams()); @@ -208,7 +209,7 @@ AttributeRangeSearcher::doRun() buildTermQuery(_query, _attrPtr->getName(), ss.str().data()); AttributeGuard guard(_attrPtr); - std::unique_ptr searchContext = + std::unique_ptr searchContext = _attrPtr->getSearch(vespalib::stringref(&_query[0], _query.size()), attribute::SearchContextParams()); @@ -247,7 +248,7 @@ AttributePrefixSearcher::doRun() buildTermQuery(_query, _attrPtr->getName(), _values[i % _values.size()].c_str(), true); AttributeGuard guard(_attrPtr); - std::unique_ptr searchContext = + std::unique_ptr searchContext = _attrPtr->getSearch(vespalib::stringref(&_query[0], _query.size()), attribute::SearchContextParams()); diff --git a/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp b/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp index 714a96f91b9..e34c0f52e41 100644 --- a/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp +++ b/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp @@ -31,11 +31,12 @@ using search::StringAttribute; using search::attribute::BasicType; using search::attribute::CollectionType; using search::attribute::Config; +using search::attribute::SearchContext; using search::attribute::SearchContextParams; using search::fef::TermFieldMatchData; using search::queryeval::SearchIterator; -typedef std::unique_ptr SearchContextPtr; +using SearchContextPtr = std::unique_ptr; typedef std::unique_ptr SearchBasePtr; struct BitVectorTest diff --git a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp index e9d928e0910..9a4728edba8 100644 --- a/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp +++ b/searchlib/src/tests/attribute/enumeratedsave/enumeratedsave_test.cpp @@ -39,10 +39,11 @@ using search::StringAttribute; using search::attribute::BasicType; using search::attribute::CollectionType; using search::attribute::Config; +using search::attribute::SearchContext; using search::attribute::SearchContextParams; using search::fef::TermFieldMatchData; -typedef std::unique_ptr SearchContextPtr; +using SearchContextPtr = std::unique_ptr; typedef std::unique_ptr SearchBasePtr; diff --git a/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp b/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp index 868f7d5a93b..ad49212fffc 100644 --- a/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp +++ b/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp @@ -37,10 +37,11 @@ using attribute::BasicType; using attribute::Config; using queryeval::PostingInfo; using queryeval::MinMaxPostingInfo; +using search::attribute::SearchContext; using search::fef::TermFieldMatchData; using search::queryeval::SearchIterator; -typedef std::unique_ptr SearchContextPtr; +using SearchContextPtr = std::unique_ptr; typedef std::unique_ptr SearchBasePtr; void diff --git a/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp b/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp index 1a8eda40f52..5cee31bf909 100644 --- a/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp +++ b/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include diff --git a/searchlib/src/tests/attribute/searchcontext/searchcontext_test.cpp b/searchlib/src/tests/attribute/searchcontext/searchcontext_test.cpp index 65de302ae04..aa64e944baa 100644 --- a/searchlib/src/tests/attribute/searchcontext/searchcontext_test.cpp +++ b/searchlib/src/tests/attribute/searchcontext/searchcontext_test.cpp @@ -47,8 +47,8 @@ isUnsignedSmallIntAttribute(const AttributeVector &a) using AttributePtr = AttributeVector::SP; using ResultSetPtr = std::unique_ptr; using SearchBasePtr = queryeval::SearchIterator::UP; -using SearchContext = AttributeVector::SearchContext; -using SearchContextPtr = std::unique_ptr; +using search::attribute::SearchContext; +using SearchContextPtr = std::unique_ptr; using largeint_t = AttributeVector::largeint_t; using attribute::BasicType; @@ -1910,7 +1910,7 @@ public: } _attr.commit(); } - search::AttributeVector::SearchContext::UP create_search_context(const std::string& term) const { + std::unique_ptr create_search_context(const std::string& term) const { return _attr.getSearch(std::make_unique(term, search::TermType::WORD), SearchContextParams().useBitVector(true)); } diff --git a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp index d8619386892..576a2ddb467 100644 --- a/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp +++ b/searchlib/src/tests/attribute/stringattribute/stringattribute_test.cpp @@ -17,6 +17,7 @@ LOG_SETUP("stringattribute_test"); using search::attribute::CollectionType; using search::attribute::IAttributeVector; +using search::attribute::SearchContext; using vespalib::datastore::EntryRef; using namespace search; @@ -385,7 +386,7 @@ testSingleValue(Attribute & svsa, Config &cfg) TEST("testSingleValue") { - EXPECT_EQUAL(24u, sizeof(AttributeVector::SearchContext)); + EXPECT_EQUAL(24u, sizeof(SearchContext)); EXPECT_EQUAL(56u, sizeof(StringSearchHelper)); EXPECT_EQUAL(88u, sizeof(SingleValueStringAttribute::StringSingleImplSearchContext)); { diff --git a/searchlib/src/tests/queryeval/queryeval.cpp b/searchlib/src/tests/queryeval/queryeval.cpp index cc9e90bb761..dbf8ddba52c 100644 --- a/searchlib/src/tests/queryeval/queryeval.cpp +++ b/searchlib/src/tests/queryeval/queryeval.cpp @@ -361,7 +361,7 @@ public: } private: search::SingleBoolAttribute _a; - search::AttributeVector::SearchContext::UP _sc; + std::unique_ptr _sc; mutable TermFieldMatchData _tfmd; }; diff --git a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt index 4fff7cf96c1..0bc7345594b 100644 --- a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt @@ -90,6 +90,7 @@ vespa_add_library(searchlib_attribute OBJECT reference_attribute.cpp reference_attribute_saver.cpp reference_mappings.cpp + search_context.cpp singleboolattribute.cpp singleenumattribute.cpp singleenumattributesaver.cpp diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp index f83bcde817b..1edd5d9fe76 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp @@ -3,14 +3,12 @@ #include "address_space_components.h" #include "attribute_read_guard.h" #include "attributefilesavetarget.h" -#include "attributeiterators.hpp" #include "attributesaver.h" #include "attributevector.h" #include "attributevector.hpp" #include "floatbase.h" #include "interlock.h" #include "ipostinglistattributebase.h" -#include "ipostinglistsearchcontext.h" #include "stringbase.h" #include #include @@ -19,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -421,72 +418,18 @@ AttributeVector::findFoldedEnums(const char *) const { const char * AttributeVector::getStringFromEnum(EnumHandle) const { return nullptr; } -AttributeVector::SearchContext::SearchContext(const AttributeVector &attr) : - _attr(attr), - _plsc(nullptr) -{ } - -AttributeVector::SearchContext::UP +std::unique_ptr AttributeVector::getSearch(QueryPacketT searchSpec, const SearchContextParams ¶ms) const { return getSearch(QueryTermDecoder::decodeTerm(searchSpec), params); } -attribute::ISearchContext::UP +std::unique_ptr AttributeVector::createSearchContext(QueryTermSimpleUP term, const attribute::SearchContextParams ¶ms) const { return getSearch(std::move(term), params); } -AttributeVector::SearchContext::~SearchContext() = default; - -unsigned int -AttributeVector::SearchContext::approximateHits() const -{ - if (_plsc != nullptr) { - return _plsc->approximateHits(); - } - return std::max(uint64_t(_attr.getNumDocs()), - _attr.getStatus().getNumValues()); -} - -SearchIterator::UP -AttributeVector::SearchContext:: -createIterator(fef::TermFieldMatchData *matchData, bool strict) -{ - if (_plsc != nullptr) { - SearchIterator::UP res = _plsc->createPostingIterator(matchData, strict); - if (res) { - return res; - } - } - return createFilterIterator(matchData, strict); -} - - -SearchIterator::UP -AttributeVector::SearchContext:: -createFilterIterator(fef::TermFieldMatchData *matchData, bool strict) -{ - if (!valid()) - return std::make_unique(); - if (getIsFilter()) { - return SearchIterator::UP(strict ? - new FilterAttributeIteratorStrict(*this, matchData) : - new FilterAttributeIteratorT(*this, matchData)); - } - return SearchIterator::UP(strict ? - new AttributeIteratorStrict(*this, matchData) : - new AttributeIteratorT(*this, matchData)); -} - - -void -AttributeVector::SearchContext::fetchPostings(const queryeval::ExecuteInfo &execInfo) { - if (_plsc != nullptr) - _plsc->fetchPostings(execInfo); -} - bool AttributeVector::apply(DocId doc, const MapValueUpdate &map) { diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.h b/searchlib/src/vespa/searchlib/attribute/attributevector.h index ce65664d7d7..4e3bd259cc6 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributevector.h +++ b/searchlib/src/vespa/searchlib/attribute/attributevector.h @@ -59,6 +59,7 @@ namespace search { class IPostingListAttributeBase; class Interlock; class InterlockGuard; + class SearchContext; class MultiValueMappingBase; } @@ -499,59 +500,10 @@ public: const tensor::ITensorAttribute *asTensorAttribute() const override; const attribute::IMultiValueAttribute* as_multi_value_attribute() const override; - /** - - Search for equality - - Range search - */ - - class SearchContext : public attribute::ISearchContext - { - template friend class AttributeIteratorT; - template friend class FilterAttributeIteratorT; - template friend class AttributePostingListIteratorT; - template friend class FilterAttributePostingListIteratorT; - protected: - using QueryTermSimpleUP = std::unique_ptr; - public: - SearchContext(const SearchContext &) = delete; - SearchContext & operator = (const SearchContext &) = delete; - - typedef std::unique_ptr UP; - ~SearchContext(); - - unsigned int approximateHits() const override; - queryeval::SearchIterator::UP createIterator(fef::TermFieldMatchData *matchData, 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 { - return static_cast(nullptr); - } - const vespalib::string &attributeName() const override { - return _attr.getName(); - } - - const AttributeVector & attribute() const { return _attr; } - - protected: - SearchContext(const AttributeVector &attr); - const AttributeVector & _attr; - - attribute::IPostingListSearchContext *_plsc; - - /** - * Creates an attribute search iterator associated with this - * search context. Postings lists are not used. - **/ - virtual queryeval::SearchIterator::UP createFilterIterator(fef::TermFieldMatchData *matchData, bool strict); - - bool getIsFilter() const { return _attr.getConfig().getIsFilter(); } - }; - - SearchContext::UP getSearch(QueryPacketT searchSpec, const attribute::SearchContextParams ¶ms) const; - attribute::ISearchContext::UP createSearchContext(QueryTermSimpleUP term, + std::unique_ptr getSearch(QueryPacketT searchSpec, const attribute::SearchContextParams ¶ms) const; + std::unique_ptr createSearchContext(QueryTermSimpleUP term, const attribute::SearchContextParams ¶ms) const override; - virtual SearchContext::UP getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams ¶ms) const = 0; + virtual std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams ¶ms) const = 0; virtual const IEnumStore* getEnumStoreBase() const; virtual IEnumStore* getEnumStoreBase(); virtual const attribute::MultiValueMappingBase *getMultiValueBase() const; diff --git a/searchlib/src/vespa/searchlib/attribute/attrvector.cpp b/searchlib/src/vespa/searchlib/attribute/attrvector.cpp index 0179841e7fa..c1e49f2ce37 100644 --- a/searchlib/src/vespa/searchlib/attribute/attrvector.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attrvector.cpp @@ -22,7 +22,7 @@ StringDirectAttribute(const vespalib::string & baseFileName, const Config & c) StringDirectAttribute::~StringDirectAttribute() = default; -AttributeVector::SearchContext::UP +std::unique_ptr StringDirectAttribute::getSearch(QueryTermSimpleUP, const attribute::SearchContextParams &) const { LOG_ABORT("StringDirectAttribute::getSearch is not implemented and should never be called."); } diff --git a/searchlib/src/vespa/searchlib/attribute/attrvector.h b/searchlib/src/vespa/searchlib/attribute/attrvector.h index b6ecc7a4cae..7713c210033 100644 --- a/searchlib/src/vespa/searchlib/attribute/attrvector.h +++ b/searchlib/src/vespa/searchlib/attribute/attrvector.h @@ -142,7 +142,7 @@ private: bool onLoad(vespalib::Executor *executor) override; const char * getFromEnum(EnumHandle e) const override { return &_buffer[e]; } const char * getStringFromEnum(EnumHandle e) const override { return &_buffer[e]; } - SearchContext::UP getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; protected: StringDirectAttribute(const vespalib::string & baseFileName, const Config & c); ~StringDirectAttribute() override; diff --git a/searchlib/src/vespa/searchlib/attribute/extendableattributes.h b/searchlib/src/vespa/searchlib/attribute/extendableattributes.h index bb8197c1908..5a1d005686e 100644 --- a/searchlib/src/vespa/searchlib/attribute/extendableattributes.h +++ b/searchlib/src/vespa/searchlib/attribute/extendableattributes.h @@ -39,12 +39,12 @@ class SingleExtAttribute using BasicType = typename Super::BasicType; using QueryTermSimpleUP = typename Super::QueryTermSimpleUP; - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override { (void) term; (void) params; - return AttributeVector::SearchContext::UP(); + return {}; } IExtendAttribute * getExtendInterface() override { return this; } public: @@ -111,12 +111,12 @@ protected: : Super(name, Config(BasicType::fromType(T()), ctype)) { } private: - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override { (void) term; (void) params; - return AttributeVector::SearchContext::UP(); + return {}; } IExtendAttribute * getExtendInterface() override { return this; } @@ -203,12 +203,12 @@ protected: class WeightedSetIntegerExtAttribute : public WeightedSetExtAttributeBase { - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override { (void) term; (void) params; - return AttributeVector::SearchContext::UP(); + return {}; } public: WeightedSetIntegerExtAttribute(const vespalib::string & name); @@ -220,12 +220,12 @@ public: class WeightedSetFloatExtAttribute : public WeightedSetExtAttributeBase { - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override { (void) term; (void) params; - return AttributeVector::SearchContext::UP(); + return {}; } public: WeightedSetFloatExtAttribute(const vespalib::string & name); diff --git a/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp b/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp index 7b2b9db574d..cfa70beeefc 100644 --- a/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/flagattribute.cpp @@ -53,7 +53,7 @@ FlagAttributeT::FlagAttributeT(const vespalib::string & baseFileName, const A } template -AttributeVector::SearchContext::UP +std::unique_ptr FlagAttributeT::getSearch(QueryTermSimple::UP qTerm, const attribute::SearchContextParams &) const { return std::make_unique(std::move(qTerm), *this); diff --git a/searchlib/src/vespa/searchlib/attribute/flagattribute.h b/searchlib/src/vespa/searchlib/attribute/flagattribute.h index 05a2ed18e45..cdf1c83e41b 100644 --- a/searchlib/src/vespa/searchlib/attribute/flagattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/flagattribute.h @@ -31,7 +31,7 @@ private: }; bool onLoad(vespalib::Executor *executor) override; bool onLoadEnumerated(ReaderBase &attrReader) override; - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(std::unique_ptr term, const attribute::SearchContextParams & params) const override; void clearOldValues(DocId doc) override; void setNewValues(DocId doc, const std::vector & values) override; diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.h b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.h index 0e4ebbcd0f4..6c5abc5f150 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.h @@ -5,6 +5,7 @@ #include "integerbase.h" #include "floatbase.h" #include "multivalueattribute.h" +#include "search_context.h" #include namespace search { @@ -59,7 +60,7 @@ public: /* * Specialization of SearchContext for weighted set type */ - class SetSearchContext final : public NumericAttribute::Range, public AttributeVector::SearchContext + class SetSearchContext final : public NumericAttribute::Range, public attribute::SearchContext { private: const MultiValueNumericAttribute & _toBeSearched; @@ -107,7 +108,7 @@ public: /* * Specialization of SearchContext for array type */ - class ArraySearchContext : public NumericAttribute::Range, public AttributeVector::SearchContext + class ArraySearchContext : public NumericAttribute::Range, public attribute::SearchContext { private: const MultiValueNumericAttribute & _toBeSearched; @@ -166,7 +167,7 @@ public: bool onLoad(vespalib::Executor *executor) override; virtual bool onLoadEnumerated(ReaderBase &attrReader); - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(std::unique_ptr term, const attribute::SearchContextParams & params) const override; virtual void clearOldValues(DocId doc); diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp index 73d248a21fa..3d6ea3970a9 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp @@ -165,7 +165,7 @@ MultiValueNumericAttribute::onLoad(vespalib::Executor *) } template -AttributeVector::SearchContext::UP +std::unique_ptr MultiValueNumericAttribute::getSearch(QueryTermSimple::UP qTerm, const attribute::SearchContextParams & params) const { @@ -193,7 +193,7 @@ bool MultiValueNumericAttribute::SetSearchContext::valid() const { return template MultiValueNumericAttribute::SetSearchContext::SetSearchContext(QueryTermSimple::UP qTerm, const NumericAttribute & toBeSearched) : NumericAttribute::Range(*qTerm), - AttributeVector::SearchContext(toBeSearched), + attribute::SearchContext(toBeSearched), _toBeSearched(static_cast &>(toBeSearched)) { } @@ -225,7 +225,7 @@ bool MultiValueNumericAttribute::ArraySearchContext::valid() const { retur template MultiValueNumericAttribute::ArraySearchContext::ArraySearchContext(QueryTermSimple::UP qTerm, const NumericAttribute & toBeSearched) : NumericAttribute::Range(*qTerm), - AttributeVector::SearchContext(toBeSearched), + attribute::SearchContext(toBeSearched), _toBeSearched(static_cast &>(toBeSearched)) { } diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.h b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.h index 1c0124f6a1c..fb0e9c88240 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.h @@ -5,6 +5,7 @@ #include "multienumattribute.h" #include "numericbase.h" #include "primitivereader.h" +#include "search_context.h" namespace search { @@ -41,7 +42,7 @@ protected: /* * Specialization of SearchContext for weighted set type */ - class SetSearchContext : public NumericAttribute::Range, public AttributeVector::SearchContext + class SetSearchContext : public NumericAttribute::Range, public attribute::SearchContext { protected: const MultiValueNumericEnumAttribute & _toBeSearched; @@ -94,7 +95,7 @@ protected: /* * Specialization of SearchContext for array type */ - class ArraySearchContext : public NumericAttribute::Range, public AttributeVector::SearchContext + class ArraySearchContext : public NumericAttribute::Range, public attribute::SearchContext { protected: const MultiValueNumericEnumAttribute & _toBeSearched; @@ -155,7 +156,7 @@ public: bool onLoadEnumerated(ReaderBase &attrReader); - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; //------------------------------------------------------------------------- diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp index 4322faefe67..80fe352630b 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp @@ -115,7 +115,7 @@ MultiValueNumericEnumAttribute::onLoad(vespalib::Executor *) } template -AttributeVector::SearchContext::UP +std::unique_ptr MultiValueNumericEnumAttribute::getSearch(QueryTermSimple::UP qTerm, const attribute::SearchContextParams & params) const { diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.h b/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.h index eca6b68455c..26e6ee12439 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.h @@ -88,7 +88,7 @@ public: void removeOldGenerations(generation_t firstUsed) override; void onGenerationChange(generation_t generation) override; - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; const IDocumentWeightAttribute *asDocumentWeightAttribute() const override; diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.hpp index 051a22bd5e8..7c348f4b910 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multinumericpostattribute.hpp @@ -71,11 +71,11 @@ MultiValueNumericPostingAttribute::onGenerationChange(generation_t generat } template -AttributeVector::SearchContext::UP +std::unique_ptr MultiValueNumericPostingAttribute::getSearch(QueryTermSimpleUP qTerm, const attribute::SearchContextParams & params) const { - std::unique_ptr sc; + std::unique_ptr sc; sc.reset(new typename std::conditional:: diff --git a/searchlib/src/vespa/searchlib/attribute/multistringattribute.h b/searchlib/src/vespa/searchlib/attribute/multistringattribute.h index 66ca9f5c04c..e832f53777b 100644 --- a/searchlib/src/vespa/searchlib/attribute/multistringattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/multistringattribute.h @@ -38,7 +38,6 @@ protected: using DocId = StringAttribute::DocId; using EnumHandle = StringAttribute::EnumHandle; using LoadedVector = StringAttribute::LoadedVector; - using SearchContext = StringAttribute::SearchContext; using ValueModifier = StringAttribute::ValueModifier; using WeightedConstChar = StringAttribute::WeightedConstChar; using WeightedEnum = StringAttribute::WeightedEnum; @@ -128,7 +127,7 @@ public: */ class StringSetImplSearchContext : public StringImplSearchContext { public: - StringSetImplSearchContext(SearchContext::QueryTermSimpleUP qTerm, const StringAttribute & toBeSearched) : + StringSetImplSearchContext(attribute::SearchContext::QueryTermSimpleUP qTerm, const StringAttribute & toBeSearched) : StringImplSearchContext(std::move(qTerm), toBeSearched) { } protected: @@ -140,7 +139,7 @@ public: */ class StringArrayImplSearchContext : public StringImplSearchContext { public: - StringArrayImplSearchContext(SearchContext::QueryTermSimpleUP qTerm, const StringAttribute & toBeSearched) : + StringArrayImplSearchContext(attribute::SearchContext::QueryTermSimpleUP qTerm, const StringAttribute & toBeSearched) : StringImplSearchContext(std::move(qTerm), toBeSearched) { } protected: @@ -154,10 +153,10 @@ public: using BT::queryTerm; using AttrType = MultiValueStringAttributeT; public: - StringTemplSearchContext(SearchContext::QueryTermSimpleUP qTerm, const AttrType & toBeSearched); + StringTemplSearchContext(attribute::SearchContext::QueryTermSimpleUP qTerm, const AttrType & toBeSearched); }; - SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; }; diff --git a/searchlib/src/vespa/searchlib/attribute/multistringattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multistringattribute.hpp index c7e092799d1..454913c3990 100644 --- a/searchlib/src/vespa/searchlib/attribute/multistringattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multistringattribute.hpp @@ -37,7 +37,7 @@ MultiValueStringAttributeT::freezeEnumDictionary() template -AttributeVector::SearchContext::UP +std::unique_ptr MultiValueStringAttributeT::getSearch(QueryTermSimpleUP qTerm, const attribute::SearchContextParams &) const { diff --git a/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.h b/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.h index e2993835d83..9f8827028cc 100644 --- a/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.h @@ -84,7 +84,7 @@ public: void removeOldGenerations(generation_t firstUsed) override; void onGenerationChange(generation_t generation) override; - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; const IDocumentWeightAttribute *asDocumentWeightAttribute() const override; diff --git a/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.hpp index a1f8b42df2f..d9c79bd7b24 100644 --- a/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multistringpostattribute.hpp @@ -85,11 +85,11 @@ MultiValueStringPostingAttributeT::onGenerationChange(generation_t generat template -AttributeVector::SearchContext::UP +std::unique_ptr MultiValueStringPostingAttributeT::getSearch(QueryTermSimpleUP qTerm, const attribute::SearchContextParams & params) const { - std::unique_ptr sc; + std::unique_ptr sc; sc.reset(new typename std::conditional:: diff --git a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp index 521b6f8c825..0602d983513 100644 --- a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.cpp @@ -1,13 +1,14 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "not_implemented_attribute.h" +#include "search_context.h" #include using vespalib::make_string_short::fmt; namespace search { using largeint_t = attribute::IAttributeVector::largeint_t; -using SearchContext = AttributeVector::SearchContext; +using attribute::SearchContext; void NotImplementedAttribute::notImplemented() const { @@ -141,10 +142,10 @@ NotImplementedAttribute::addDoc(DocId &) { return false; } -SearchContext::UP +std::unique_ptr NotImplementedAttribute::getSearch(QueryTermSimpleUP, const attribute::SearchContextParams &) const { notImplemented(); - return SearchContext::UP(); + return {}; } void NotImplementedAttribute::onAddDocs(DocId ) { } diff --git a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h index f3af6cdd1ae..8987681d640 100644 --- a/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h +++ b/searchlib/src/vespa/searchlib/attribute/not_implemented_attribute.h @@ -35,7 +35,7 @@ struct NotImplementedAttribute : AttributeVector { bool addDoc(DocId &) override; void onAddDocs(DocId lidLimit) override; - SearchContext::UP getSearch(QueryTermSimpleUP, const attribute::SearchContextParams &) const override; + std::unique_ptr getSearch(QueryTermSimpleUP, const attribute::SearchContextParams &) const override; }; } // namespace search diff --git a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp index 4464ab02c86..473174de284 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp @@ -5,6 +5,7 @@ #include "readerbase.h" #include "reference_attribute.h" #include "reference_attribute_saver.h" +#include "search_context.h" #include #include #include @@ -458,14 +459,14 @@ ReferenceAttribute::onShrinkLidSpace() namespace { -class ReferenceSearchContext : public AttributeVector::SearchContext { +class ReferenceSearchContext : public attribute::SearchContext { private: const ReferenceAttribute& _ref_attr; GlobalId _term; public: ReferenceSearchContext(const ReferenceAttribute& ref_attr, const GlobalId& term) - : AttributeVector::SearchContext(ref_attr), + : attribute::SearchContext(ref_attr), _ref_attr(ref_attr), _term(term) { @@ -492,7 +493,7 @@ public: } -AttributeVector::SearchContext::UP +std::unique_ptr ReferenceAttribute::getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams& params) const { (void) params; diff --git a/searchlib/src/vespa/searchlib/attribute/reference_attribute.h b/searchlib/src/vespa/searchlib/attribute/reference_attribute.h index b445d030b57..c86793036cd 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_attribute.h +++ b/searchlib/src/vespa/searchlib/attribute/reference_attribute.h @@ -98,7 +98,7 @@ public: _referenceMappings.foreach_lid(targetLid, std::forward(func)); } - SearchContext::UP getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams& params) const override; + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams& params) const override; }; } diff --git a/searchlib/src/vespa/searchlib/attribute/search_context.cpp b/searchlib/src/vespa/searchlib/attribute/search_context.cpp new file mode 100644 index 00000000000..8e8cca13671 --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/search_context.cpp @@ -0,0 +1,81 @@ +// Copyright Yahoo. 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 { + +SearchContext::SearchContext(const AttributeVector &attr) + : _attr(attr), + _plsc(nullptr) +{ +} + +SearchContext::~SearchContext() = default; + +unsigned int +SearchContext::approximateHits() const +{ + if (_plsc != nullptr) { + return _plsc->approximateHits(); + } + return std::max(uint64_t(_attr.getNumDocs()), _attr.getStatus().getNumValues()); +} + +std::unique_ptr +SearchContext::createIterator(fef::TermFieldMatchData* matchData, bool strict) +{ + if (_plsc != nullptr) { + std::unique_ptr 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) +{ + if (_plsc != nullptr) { + _plsc->fetchPostings(execInfo); + } +} + +const vespalib::string& +SearchContext::attributeName() const +{ + return _attr.getName(); +} + +bool +SearchContext::getIsFilter() const +{ + return _attr.getConfig().getIsFilter(); +} + + +} diff --git a/searchlib/src/vespa/searchlib/attribute/search_context.h b/searchlib/src/vespa/searchlib/attribute/search_context.h new file mode 100644 index 00000000000..3e9479b57fb --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/search_context.h @@ -0,0 +1,62 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include + +namespace search { + +class AttributeVector; +class QueryTermSimple; + +} + +namespace search::queryeval { class SearchIterator; } + +namespace search::attribute { + +class IPostingListSearchContext; + +/* + * SearchContext handles the creation of search iterators for a query term on an attribute vector. + * This is an abstract class. + */ +class SearchContext : public ISearchContext +{ +protected: + using QueryTermSimpleUP = std::unique_ptr; +public: + SearchContext(const SearchContext&) = delete; + SearchContext(SearchContext&&) = delete; + SearchContext& operator=(const SearchContext&) = delete; + SearchContext& operator=(SearchContext&&) = delete; + ~SearchContext() override; + + unsigned int approximateHits() const override; + std::unique_ptr createIterator(fef::TermFieldMatchData* matchData, 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 { + return static_cast(nullptr); + } + const vespalib::string& attributeName() const override; + + const AttributeVector& attribute() const { return _attr; } + +protected: + SearchContext(const AttributeVector& attr); + + const AttributeVector& _attr; + attribute::IPostingListSearchContext* _plsc; + + /** + * Creates an attribute search iterator associated with this + * search context. Postings lists are not used. + **/ + virtual std::unique_ptr createFilterIterator(fef::TermFieldMatchData* matchData, bool strict); + + bool getIsFilter() const; +}; + +} diff --git a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp index f57f3336627..8db99c115a0 100644 --- a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.cpp @@ -1,10 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include "singleboolattribute.h" #include "attributevector.hpp" #include "iattributesavetarget.h" #include "ipostinglistsearchcontext.h" #include "primitivereader.h" -#include "singleboolattribute.h" +#include "search_context.h" #include #include #include @@ -100,7 +101,7 @@ SingleBoolAttribute::onUpdateStat() { namespace { -class BitVectorSearchContext : public AttributeVector::SearchContext, public attribute::IPostingListSearchContext +class BitVectorSearchContext : public attribute::SearchContext, public attribute::IPostingListSearchContext { private: const BitVector & _bv; @@ -174,7 +175,7 @@ BitVectorSearchContext::approximateHits() const { } -AttributeVector::SearchContext::UP +std::unique_ptr SingleBoolAttribute::getSearch(std::unique_ptr term, const attribute::SearchContextParams &) const { return std::make_unique(std::move(term), *this); } diff --git a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.h b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.h index 31054f5e80a..f7efe27277e 100644 --- a/searchlib/src/vespa/searchlib/attribute/singleboolattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singleboolattribute.h @@ -30,7 +30,7 @@ public: void onGenerationChange(generation_t generation) override; uint64_t getEstimatedSaveByteSize() const override; - SearchContext::UP + std::unique_ptr getSearch(std::unique_ptr term, const attribute::SearchContextParams & params) const override; uint32_t getValueCount(DocId doc) const override { diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.h b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.h index df03f8811e1..30b205482e8 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.h @@ -4,6 +4,7 @@ #include "integerbase.h" #include "floatbase.h" +#include "search_context.h" #include #include #include @@ -37,7 +38,7 @@ private: * Specialization of SearchContext */ template - class SingleSearchContext final : public M, public AttributeVector::SearchContext + class SingleSearchContext final : public M, public attribute::SearchContext { private: const T * _data; @@ -106,7 +107,7 @@ public: bool onLoadEnumerated(ReaderBase &attrReader); - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(std::unique_ptr term, const attribute::SearchContextParams & params) const override; void set(DocId doc, T v) { diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp index 9e8d2cfff7d..03e6cd95ded 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp @@ -151,7 +151,7 @@ SingleValueNumericAttribute::onLoad(vespalib::Executor *) } template -AttributeVector::SearchContext::UP +std::unique_ptr SingleValueNumericAttribute::getSearch(QueryTermSimple::UP qTerm, const attribute::SearchContextParams & params) const { @@ -215,7 +215,7 @@ template SingleValueNumericAttribute::SingleSearchContext::SingleSearchContext(QueryTermSimple::UP qTerm, const NumericAttribute & toBeSearched) : M(*qTerm, true), - AttributeVector::SearchContext(toBeSearched), + attribute::SearchContext(toBeSearched), _data(&static_cast &>(toBeSearched)._data.acquire_elem_ref(0)) { } diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h index 0198668f4f2..4db14e18194 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h @@ -4,6 +4,7 @@ #include "singleenumattribute.h" #include "numericbase.h" +#include "search_context.h" #include namespace search { @@ -48,7 +49,7 @@ protected: /* * Specialization of SearchContext */ - class SingleSearchContext : public NumericAttribute::Range, public AttributeVector::SearchContext + class SingleSearchContext : public NumericAttribute::Range, public attribute::SearchContext { protected: const SingleValueNumericEnumAttribute & _toBeSearched; @@ -96,7 +97,7 @@ public: bool onLoadEnumerated(ReaderBase &attrReader); - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; //------------------------------------------------------------------------- diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp index 845d3704a32..989532be4fd 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp @@ -152,7 +152,7 @@ SingleValueNumericEnumAttribute::onLoad(vespalib::Executor *) template -AttributeVector::SearchContext::UP +std::unique_ptr SingleValueNumericEnumAttribute::getSearch(QueryTermSimple::UP qTerm, const attribute::SearchContextParams & params) const { @@ -175,7 +175,7 @@ SingleValueNumericEnumAttribute::SingleSearchContext::valid() const template SingleValueNumericEnumAttribute::SingleSearchContext::SingleSearchContext(QueryTermSimpleUP qTerm, const NumericAttribute & toBeSearched) : NumericAttribute::Range(*qTerm, true), - AttributeVector::SearchContext(toBeSearched), + attribute::SearchContext(toBeSearched), _toBeSearched(static_cast &>(toBeSearched)) { } diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.h b/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.h index e98d9f527c2..b91a14f5c46 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.h @@ -75,7 +75,7 @@ public: void removeOldGenerations(generation_t firstUsed) override; void onGenerationChange(generation_t generation) override; - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; bool onAddDoc(DocId doc) override { diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.hpp index b87dadb5429..252677fabcc 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericpostattribute.hpp @@ -143,7 +143,7 @@ SingleValueNumericPostingAttribute::onGenerationChange(generation_t generatio } template -AttributeVector::SearchContext::UP +std::unique_ptr SingleValueNumericPostingAttribute::getSearch(QueryTermSimple::UP qTerm, const attribute::SearchContextParams & params) const { diff --git a/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp b/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp index 368a081e020..9c6871d8ecb 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.cpp @@ -1,10 +1,10 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include "singlesmallnumericattribute.h" #include "attributeiterators.hpp" #include "attributevector.hpp" #include "iattributesavetarget.h" #include "primitivereader.h" -#include "singlesmallnumericattribute.h" #include #include #include @@ -168,7 +168,7 @@ SingleValueSmallNumericAttribute::onSave(IAttributeSaveTarget &saveTarget) assert(numDocs == getCommittedDocIdLimit()); } -AttributeVector::SearchContext::UP +std::unique_ptr SingleValueSmallNumericAttribute::getSearch(std::unique_ptr qTerm, const attribute::SearchContextParams &) const { diff --git a/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.h b/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.h index 6c78708593a..0e3d485b1bb 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singlesmallnumericattribute.h @@ -4,6 +4,7 @@ #include "integerbase.h" #include "floatbase.h" +#include "search_context.h" #include #include #include @@ -13,7 +14,7 @@ namespace search { class SingleValueSmallNumericAttribute : public IntegerAttributeTemplate { private: -// friend class AttributeVector::SearchContext; +// friend class attribute::SearchContext; typedef IntegerAttributeTemplate B; typedef B::BaseType T; typedef B::DocId DocId; @@ -59,7 +60,7 @@ public: /* * Specialization of SearchContext */ - class SingleSearchContext : public NumericAttribute::Range, public SearchContext + class SingleSearchContext : public NumericAttribute::Range, public attribute::SearchContext { private: const Word *_wordData; @@ -124,7 +125,7 @@ public: bool onLoad(vespalib::Executor *executor) override; void onSave(IAttributeSaveTarget &saveTarget) override; - SearchContext::UP + std::unique_ptr getSearch(std::unique_ptr term, const attribute::SearchContextParams & params) const override; T getFast(DocId doc) const { diff --git a/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h b/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h index 8c4bffe237e..75ddfc99564 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h @@ -26,7 +26,6 @@ protected: using EnumStore = typename SingleValueEnumAttribute::EnumStore; using LoadedVector = StringAttribute::LoadedVector; using QueryTermSimpleUP = AttributeVector::QueryTermSimpleUP; - using SearchContext = StringAttribute::SearchContext; using ValueModifier = StringAttribute::ValueModifier; using WeightedConstChar = StringAttribute::WeightedConstChar; using WeightedEnum = StringAttribute::WeightedEnum; @@ -78,7 +77,7 @@ public: return 1; } - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; class StringSingleImplSearchContext : public StringAttribute::StringSearchContext { diff --git a/searchlib/src/vespa/searchlib/attribute/singlestringattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlestringattribute.hpp index 7c8815af30b..6c99db68bd4 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlestringattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlestringattribute.hpp @@ -36,7 +36,7 @@ SingleValueStringAttributeT::freezeEnumDictionary() template -AttributeVector::SearchContext::UP +std::unique_ptr SingleValueStringAttributeT::getSearch(QueryTermSimpleUP qTerm, const attribute::SearchContextParams &) const { diff --git a/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.h b/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.h index a209dd4bfad..f75926e5a60 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.h @@ -78,7 +78,7 @@ public: void removeOldGenerations(generation_t firstUsed) override; void onGenerationChange(generation_t generation) override; - AttributeVector::SearchContext::UP + std::unique_ptr getSearch(QueryTermSimpleUP term, const attribute::SearchContextParams & params) const override; bool onAddDoc(DocId doc) override { diff --git a/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.hpp index 58c62e60efe..1f52bbe3b47 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlestringpostattribute.hpp @@ -135,7 +135,7 @@ SingleValueStringPostingAttributeT::onGenerationChange(generation_t generatio } template -AttributeVector::SearchContext::UP +std::unique_ptr SingleValueStringPostingAttributeT::getSearch(QueryTermSimpleUP qTerm, const attribute::SearchContextParams & params) const { diff --git a/searchlib/src/vespa/searchlib/attribute/stringbase.h b/searchlib/src/vespa/searchlib/attribute/stringbase.h index 6ba4c801590..f2adc863234 100644 --- a/searchlib/src/vespa/searchlib/attribute/stringbase.h +++ b/searchlib/src/vespa/searchlib/attribute/stringbase.h @@ -7,6 +7,7 @@ #include "changevector.h" #include "i_enum_store.h" #include "loadedenumvalue.h" +#include "search_context.h" #include #include #include @@ -120,7 +121,7 @@ private: long onSerializeForDescendingSort(DocId doc, void * serTo, long available, const common::BlobConverter * bc) const override; protected: - class StringSearchContext : public SearchContext { + class StringSearchContext : public attribute::SearchContext { public: StringSearchContext(QueryTermSimpleUP qTerm, const StringAttribute & toBeSearched); ~StringSearchContext() override; -- cgit v1.2.3