diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-02-06 17:50:28 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-02-06 17:57:25 +0100 |
commit | cee172315189ae386f90ef8bc9a76e21918920bb (patch) | |
tree | a8093704e2ddb3c37b467c756d9b589040a560ab /searchlib | |
parent | 7a017b9c4fa0e8997dd0ff4e3c2a3ff03597e05e (diff) |
Implement get_hits for attribute postinglist iterator too.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/attributeiterators.h | 4 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/attributeiterators.hpp | 15 |
2 files changed, 14 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attributeiterators.h b/searchlib/src/vespa/searchlib/attribute/attributeiterators.h index a05dbd5430e..3b0869faf30 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributeiterators.h +++ b/searchlib/src/vespa/searchlib/attribute/attributeiterators.h @@ -46,8 +46,7 @@ public: : AttributeIteratorBase(matchData), _docIdLimit(docIdLimit), _weight(1) - { - } + { } protected: void visitMembers(vespalib::ObjectVisitor &visitor) const override; void doUnpack(uint32_t docId) override; @@ -201,6 +200,7 @@ private: } void initRange(uint32_t begin, uint32_t end) override; + std::unique_ptr<BitVector> get_hits(uint32_t begin_id) override; public: // Note: iterator constructor argument is destroyed diff --git a/searchlib/src/vespa/searchlib/attribute/attributeiterators.hpp b/searchlib/src/vespa/searchlib/attribute/attributeiterators.hpp index f14be8e20cc..2831fcf00da 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributeiterators.hpp +++ b/searchlib/src/vespa/searchlib/attribute/attributeiterators.hpp @@ -15,8 +15,7 @@ namespace search { template <typename PL> AttributePostingListIteratorT<PL>:: -AttributePostingListIteratorT(PL &iterator, - bool hasWeight, +AttributePostingListIteratorT(PL &iterator, bool hasWeight, fef::TermFieldMatchData *matchData) : AttributePostingListIterator(hasWeight, matchData), _iterator(), @@ -77,9 +76,19 @@ AttributePostingListIteratorT<PL>::doSeek(uint32_t docId) template <typename PL> std::unique_ptr<BitVector> +AttributePostingListIteratorT<PL>::get_hits(uint32_t begin_id) { + BitVector::UP result(BitVector::create(begin_id, getEndId())); + for (; _iterator.valid() && _iterator.getKey() < getEndId(); ++_iterator) { + result->setBit(_iterator.getKey()); + } + return result; +} + +template <typename PL> +std::unique_ptr<BitVector> FilterAttributePostingListIteratorT<PL>::get_hits(uint32_t begin_id) { BitVector::UP result(BitVector::create(begin_id, getEndId())); - for (; _iterator.getKey() < getEndId(); ++_iterator) { + for (; _iterator.valid() && _iterator.getKey() < getEndId(); ++_iterator) { result->setBit(_iterator.getKey()); } return result; |