From d1eea019622e242b78ec3e7d3cd741914a2b7130 Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Fri, 21 Jun 2019 14:15:26 +0000 Subject: Fix bugs in doUnpack() in memory posting iterator. --- .../src/tests/memoryindex/field_index/field_index_test.cpp | 12 ++++++++++++ .../src/vespa/searchlib/memoryindex/posting_iterator.cpp | 4 +++- searchlib/src/vespa/searchlib/queryeval/iterators.h | 3 +-- 3 files changed, 16 insertions(+), 3 deletions(-) (limited to 'searchlib/src') diff --git a/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp b/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp index de3b87194f8..ac5ef45e330 100644 --- a/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp +++ b/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +32,7 @@ using namespace fef; using namespace index; using document::Document; +using queryeval::RankedSearchIteratorBase; using queryeval::SearchIterator; using search::index::schema::CollectionType; using search::index::schema::DataType; @@ -641,6 +643,9 @@ struct FieldIndexInterleavedFeaturesTest : public FieldIndexTest(*itr); + EXPECT_TRUE(ranked_itr.getUnpacked()); EXPECT_TRUE(!itr->seek(11)); EXPECT_TRUE(itr->isAtEnd()); } @@ -667,6 +672,13 @@ TEST_F(FieldIndexInterleavedFeaturesTest, both_normal_and_interleaved_features_a expect_features_unpacked("{5:0,1}", 2, 5); } +TEST_F(FieldIndexInterleavedFeaturesTest, no_features_are_unpacked) +{ + match_data.term.setNeedNormalFeatures(false); + match_data.term.setNeedInterleavedFeatures(false); + expect_features_unpacked("{1000000:}", 0, 0); +} + Schema make_multi_field_schema() { diff --git a/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp b/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp index ecaa1514c6b..735fec2bb5f 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp @@ -124,13 +124,15 @@ PostingIteratorreset(docId); } if (interleaved_features && unpack_interleaved_features) { auto* tfmd = _matchData[0]; tfmd->setNumOccs(_itr.getData().get_num_occs()); tfmd->setFieldLength(_itr.getData().get_field_length()); } + setUnpacked(); } template diff --git a/searchlib/src/vespa/searchlib/queryeval/iterators.h b/searchlib/src/vespa/searchlib/queryeval/iterators.h index 43d046a78b7..0e44a6f6ff6 100644 --- a/searchlib/src/vespa/searchlib/queryeval/iterators.h +++ b/searchlib/src/vespa/searchlib/queryeval/iterators.h @@ -16,14 +16,13 @@ public: private: uint32_t _needUnpack; protected: - bool getUnpacked() const { return _needUnpack == 0; } void setUnpacked() { _needUnpack = 0; } void clearUnpacked() { _needUnpack = 1; } uint32_t getNeedUnpack() const { return _needUnpack; } void incNeedUnpack() { ++_needUnpack; } - public: RankedSearchIteratorBase(const fef::TermFieldMatchDataArray &matchData); + bool getUnpacked() const { return _needUnpack == 0; } }; } -- cgit v1.2.3