summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2021-03-15 11:18:41 +0100
committerTor Egge <Tor.Egge@broadpark.no>2021-03-15 11:18:41 +0100
commita2b9f7da924c33205c3aacdc572dda253d14e003 (patch)
treed566ea65e65557f220ecb8a4474dfc0c06f19163
parentb7027ef7f782df562f60a74cf09d77aab2105193 (diff)
Prepare for reducing direct usage of EnumPostingTree and increasing usage
of IEnumStoreDictionary.
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistattribute.cpp20
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistattribute.h4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.h9
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postingstore.cpp13
-rw-r--r--searchlib/src/vespa/searchlib/attribute/postingstore.h6
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;