summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-02-06 17:50:28 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2017-02-06 17:57:25 +0100
commitcee172315189ae386f90ef8bc9a76e21918920bb (patch)
treea8093704e2ddb3c37b467c756d9b589040a560ab /searchlib
parent7a017b9c4fa0e8997dd0ff4e3c2a3ff03597e05e (diff)
Implement get_hits for attribute postinglist iterator too.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributeiterators.h4
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributeiterators.hpp15
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;