diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2021-03-15 11:18:41 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2021-03-15 11:18:41 +0100 |
commit | a2b9f7da924c33205c3aacdc572dda253d14e003 (patch) | |
tree | d566ea65e65557f220ecb8a4474dfc0c06f19163 | |
parent | b7027ef7f782df562f60a74cf09d77aab2105193 (diff) |
Prepare for reducing direct usage of EnumPostingTree and increasing usage
of IEnumStoreDictionary.
7 files changed, 36 insertions, 29 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistattribute.cpp b/searchlib/src/vespa/searchlib/attribute/postinglistattribute.cpp index 02e94b8281e..820c0301e7c 100644 --- a/searchlib/src/vespa/searchlib/attribute/postinglistattribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/postinglistattribute.cpp @@ -14,10 +14,10 @@ PostingListAttributeBase<P>:: PostingListAttributeBase(AttributeVector &attr, IEnumStore &enumStore) : attribute::IPostingListAttributeBase(), - _postingList(enumStore.get_dictionary().get_posting_dictionary(), attr.getStatus(), + _postingList(enumStore.get_dictionary(), attr.getStatus(), attr.getConfig()), _attr(attr), - _dict(enumStore.get_dictionary().get_posting_dictionary()) + _dictionary(enumStore.get_dictionary()) { } template <typename P> @@ -29,7 +29,8 @@ PostingListAttributeBase<P>::clearAllPostings() { _postingList.clearBuilder(); _attr.incGeneration(); // Force freeze - auto itr = _dict.begin(); + auto& dict = _dictionary.get_posting_dictionary(); + auto itr = dict.begin(); EntryRef prev; while (itr.valid()) { EntryRef ref(itr.getData()); @@ -61,7 +62,8 @@ PostingListAttributeBase<P>::handle_load_posting_lists_and_update_enum_store(enu uint32_t preve = 0; uint32_t refCount = 0; - auto itr = _dict.begin(); + auto& dict = _dictionary.get_posting_dictionary(); + auto itr = dict.begin(); auto posting_itr = itr; assert(itr.valid()); for (const auto& elem : loaded_enums) { @@ -119,7 +121,8 @@ PostingListAttributeBase<P>::updatePostings(PostingMap &changePost, for (auto& elem : changePost) { auto& change = elem.second; EnumIndex idx = elem.first.getEnumIdx(); - auto dictItr = _dict.lowerBound(idx, cmp); + auto& dict = _dictionary.get_posting_dictionary(); + auto dictItr = dict.lowerBound(idx, cmp); assert(dictItr.valid() && dictItr.getKey() == idx); EntryRef newPosting(dictItr.getData()); @@ -130,7 +133,7 @@ PostingListAttributeBase<P>::updatePostings(PostingMap &changePost, &change._removals[0], &change._removals[0] + change._removals.size()); - _dict.thaw(dictItr); + dict.thaw(dictItr); dictItr.writeData(newPosting.ref()); } } @@ -168,7 +171,8 @@ clearPostings(attribute::IAttributeVector::EnumHandle eidx, } EntryRef er(eidx); - auto itr = _dict.lowerBound(er, cmp); + auto& dict = _dictionary.get_posting_dictionary(); + auto itr = dict.lowerBound(er, cmp); assert(itr.valid()); EntryRef newPosting(itr.getData()); @@ -181,7 +185,7 @@ clearPostings(attribute::IAttributeVector::EnumHandle eidx, &postings._removals[0], &postings._removals[0] + postings._removals.size()); - _dict.thaw(itr); + dict.thaw(itr); itr.writeData(newPosting.ref()); } diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistattribute.h b/searchlib/src/vespa/searchlib/attribute/postinglistattribute.h index eab8d1576fd..03348f08486 100644 --- a/searchlib/src/vespa/searchlib/attribute/postinglistattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/postinglistattribute.h @@ -49,7 +49,7 @@ protected: PostingList _postingList; AttributeVector &_attr; - EnumPostingTree &_dict; + IEnumStoreDictionary& _dictionary; PostingListAttributeBase(AttributeVector &attr, IEnumStore &enumStore); virtual ~PostingListAttributeBase(); @@ -95,7 +95,7 @@ public: using Parent::clearPostings; using Parent::_postingList; using Parent::_attr; - using Parent::_dict; + using Parent::_dictionary; private: EnumStore &_es; diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp index 1c9b8dbf7b2..10a998da46b 100644 --- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp +++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp @@ -11,16 +11,17 @@ namespace search::attribute { using vespalib::btree::BTreeNode; PostingListSearchContext:: -PostingListSearchContext(const Dictionary &dictionary, +PostingListSearchContext(const IEnumStoreDictionary& dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, uint32_t minBvDocFreq, bool useBitVector, const ISearchContext &baseSearchCtx) - : _frozenDictionary(dictionary.getFrozenView()), - _lowerDictItr(BTreeNode::Ref(), dictionary.getAllocator()), - _upperDictItr(BTreeNode::Ref(), dictionary.getAllocator()), + : _dictionary(dictionary), + _frozenDictionary(_dictionary.get_posting_dictionary().getFrozenView()), + _lowerDictItr(BTreeNode::Ref(), _frozenDictionary.getAllocator()), + _upperDictItr(BTreeNode::Ref(), _frozenDictionary.getAllocator()), _uniqueValues(0u), _docIdLimit(docIdLimit), _dictSize(_frozenDictionary.size()), diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h index d8fcfaff958..3777f3cf4ea 100644 --- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h +++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h @@ -29,6 +29,7 @@ protected: using FrozenDictionary = Dictionary::FrozenView; using EnumIndex = IEnumStore::Index; + const IEnumStoreDictionary& _dictionary; const FrozenDictionary _frozenDictionary; DictionaryConstIterator _lowerDictItr; DictionaryConstIterator _upperDictItr; @@ -47,7 +48,7 @@ protected: const ISearchContext &_baseSearchCtx; - PostingListSearchContext(const Dictionary &dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, + PostingListSearchContext(const IEnumStoreDictionary& dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, uint32_t minBvDocFreq, bool useBitVector, const ISearchContext &baseSearchCtx); ~PostingListSearchContext(); @@ -110,7 +111,7 @@ protected: static const long MIN_UNIQUE_VALUES_TO_NUMDOCS_RATIO_BEFORE_APPROXIMATION = 20; static const long MIN_APPROXHITS_TO_NUMDOCS_RATIO_BEFORE_APPROXIMATION = 10; - PostingListSearchContextT(const Dictionary &dictionary, uint32_t docIdLimit, uint64_t numValues, + PostingListSearchContextT(const IEnumStoreDictionary& dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, const PostingList &postingList, uint32_t minBvDocFreq, bool useBitVector, const ISearchContext &baseSearchCtx); ~PostingListSearchContextT() override; @@ -148,7 +149,7 @@ protected: using Parent::countHits; using Parent::singleHits; - PostingListFoldedSearchContextT(const Dictionary &dictionary, uint32_t docIdLimit, uint64_t numValues, + PostingListFoldedSearchContextT(const IEnumStoreDictionary& dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, const PostingList &postingList, uint32_t minBvDocFreq, bool useBitVector, const ISearchContext &baseSearchCtx); @@ -247,7 +248,7 @@ template <typename BaseSC, typename BaseSC2, typename AttrT> PostingSearchContext<BaseSC, BaseSC2, AttrT>:: PostingSearchContext(QueryTermSimpleUP qTerm, bool useBitVector, const AttrT &toBeSearched) : BaseSC(std::move(qTerm), toBeSearched), - BaseSC2(toBeSearched.getEnumStore().get_posting_dictionary(), + BaseSC2(toBeSearched.getEnumStore().get_dictionary(), toBeSearched.getCommittedDocIdLimit(), toBeSearched.getStatus().getNumValues(), toBeSearched.hasWeightedSetType(), diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp index 072b52ff47a..f99ca61cba0 100644 --- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp +++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp @@ -20,7 +20,7 @@ namespace search::attribute { template <typename DataT> PostingListSearchContextT<DataT>:: -PostingListSearchContextT(const Dictionary &dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, +PostingListSearchContextT(const IEnumStoreDictionary& dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, const PostingList &postingList, uint32_t minBvDocFreq, bool useBitVector, const ISearchContext &searchContext) : PostingListSearchContext(dictionary, docIdLimit, numValues, hasWeight, minBvDocFreq, useBitVector, searchContext), @@ -282,7 +282,7 @@ PostingListSearchContextT<DataT>::applyRangeLimit(int rangeLimit) template <typename DataT> PostingListFoldedSearchContextT<DataT>:: -PostingListFoldedSearchContextT(const Dictionary &dictionary, uint32_t docIdLimit, uint64_t numValues, +PostingListFoldedSearchContextT(const IEnumStoreDictionary& dictionary, uint32_t docIdLimit, uint64_t numValues, bool hasWeight, const PostingList &postingList, uint32_t minBvDocFreq, bool useBitVector, const ISearchContext &searchContext) : Parent(dictionary, docIdLimit, numValues, hasWeight, postingList, minBvDocFreq, useBitVector, searchContext) diff --git a/searchlib/src/vespa/searchlib/attribute/postingstore.cpp b/searchlib/src/vespa/searchlib/attribute/postingstore.cpp index 0473a7b2915..9fd4597c3d2 100644 --- a/searchlib/src/vespa/searchlib/attribute/postingstore.cpp +++ b/searchlib/src/vespa/searchlib/attribute/postingstore.cpp @@ -15,7 +15,7 @@ using vespalib::btree::BTreeNoLeafData; // #define FORCE_BITVECTORS -PostingStoreBase2::PostingStoreBase2(EnumPostingTree &dict, Status &status, const Config &config) +PostingStoreBase2::PostingStoreBase2(IEnumStoreDictionary& dictionary, Status &status, const Config &config) : #ifdef FORCE_BITVECTORS _enableBitVectors(true), @@ -29,7 +29,7 @@ PostingStoreBase2::PostingStoreBase2(EnumPostingTree &dict, Status &status, cons _minBvDocFreq(64), _maxBvDocFreq(std::numeric_limits<uint32_t>::max()), _bvs(), - _dict(dict), + _dictionary(dictionary), _status(status), _bvExtraBytes(0) { @@ -62,10 +62,10 @@ PostingStoreBase2::resizeBitVectors(uint32_t newSize, uint32_t newCapacity) template <typename DataT> -PostingStore<DataT>::PostingStore(EnumPostingTree &dict, Status &status, +PostingStore<DataT>::PostingStore(IEnumStoreDictionary& dictionary, Status &status, const Config &config) : Parent(false), - PostingStoreBase2(dict, status, config), + PostingStoreBase2(dictionary, status, config), _bvType(1, 1024u, RefType::offsetSize()) { // TODO: Add type for bitvector @@ -125,7 +125,8 @@ PostingStore<DataT>::removeSparseBitVectors() } if (needscan) { typedef EnumPostingTree::Iterator EnumIterator; - for (EnumIterator dictItr = _dict.begin(); dictItr.valid(); ++dictItr) { + auto& dict = _dictionary.get_posting_dictionary(); + for (EnumIterator dictItr = dict.begin(); dictItr.valid(); ++dictItr) { if (!isBitVector(getTypeId(EntryRef(dictItr.getData())))) continue; EntryRef ref(dictItr.getData()); @@ -153,7 +154,7 @@ PostingStore<DataT>::removeSparseBitVectors() normalizeTree(ref, tree, false); } } - _dict.thaw(dictItr); + dict.thaw(dictItr); dictItr.writeData(ref.ref()); res = true; } diff --git a/searchlib/src/vespa/searchlib/attribute/postingstore.h b/searchlib/src/vespa/searchlib/attribute/postingstore.h index 45e54ad24f2..5e41421e814 100644 --- a/searchlib/src/vespa/searchlib/attribute/postingstore.h +++ b/searchlib/src/vespa/searchlib/attribute/postingstore.h @@ -44,14 +44,14 @@ public: uint32_t _maxBvDocFreq; // Greater than or equal to this ==> create bv protected: std::set<uint32_t> _bvs; // Current bitvectors - EnumPostingTree &_dict; + IEnumStoreDictionary& _dictionary; Status &_status; uint64_t _bvExtraBytes; static constexpr uint32_t BUFFERTYPE_BITVECTOR = 9u; public: - PostingStoreBase2(EnumPostingTree &dict, Status &status, const Config &config); + PostingStoreBase2(IEnumStoreDictionary& dictionary, Status &status, const Config &config); virtual ~PostingStoreBase2(); bool resizeBitVectors(uint32_t newSize, uint32_t newCapacity); virtual bool removeSparseBitVectors() = 0; @@ -97,7 +97,7 @@ public: typedef vespalib::datastore::Handle<BitVectorEntry> BitVectorRefPair; - PostingStore(EnumPostingTree &dict, Status &status, const Config &config); + PostingStore(IEnumStoreDictionary& dictionary, Status &status, const Config &config); ~PostingStore(); bool removeSparseBitVectors() override; |