diff options
Diffstat (limited to 'searchlib/src/tests/memoryindex/field_index/field_index_test.cpp')
-rw-r--r-- | searchlib/src/tests/memoryindex/field_index/field_index_test.cpp | 112 |
1 files changed, 72 insertions, 40 deletions
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 0f1c966ad5d..15d97d314a1 100644 --- a/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp +++ b/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp @@ -197,6 +197,25 @@ assertPostingList(std::vector<uint32_t> &exp, PostingConstItr itr) return assertPostingList(ss.str(), itr); } +FieldIndex::PostingList::Iterator +find_in_field_index(const vespalib::stringref word, + uint32_t fieldId, + const FieldIndexCollection& fic) +{ + auto* field_index = dynamic_cast<FieldIndex*>(fic.getFieldIndex(fieldId)); + assert(field_index != nullptr); + return field_index->find(word); +} + +FieldIndex::PostingList::ConstIterator +find_frozen_in_field_index(const vespalib::stringref word, + uint32_t fieldId, + const FieldIndexCollection& fic) +{ + auto* field_index = dynamic_cast<FieldIndex*>(fic.getFieldIndex(fieldId)); + assert(field_index != nullptr); + return field_index->findFrozen(word); +} namespace { @@ -332,7 +351,7 @@ public: bool assertPosting(const vespalib::string &word, uint32_t fieldId) { std::vector<uint32_t> exp = _mock.find(word, fieldId); - PostingConstItr itr = _fieldIndexes.find(word, fieldId); + PostingConstItr itr = find_in_field_index(word, fieldId, _fieldIndexes); bool result = assertPostingList(exp, itr); EXPECT_TRUE(result); return result; @@ -487,6 +506,8 @@ make_multi_field_schema() return result; } + + struct FieldIndexCollectionTest : public ::testing::Test { Schema schema; FieldIndexCollection fic; @@ -496,6 +517,11 @@ struct FieldIndexCollectionTest : public ::testing::Test { { } ~FieldIndexCollectionTest() {} + + FieldIndex::PostingList::Iterator find(const vespalib::stringref word, + uint32_t fieldId) const { + return find_in_field_index(word, fieldId, fic); + } }; TEST_F(FieldIndexTest, require_that_fresh_insert_works) @@ -529,12 +555,12 @@ TEST_F(FieldIndexCollectionTest, require_that_multiple_posting_lists_across_mult WrapInserter(fic, 0).word("a").add(10).word("b").add(11).add(15).flush(); WrapInserter(fic, 1).word("a").add(5).word("b").add(12).flush(); EXPECT_EQ(4u, fic.getNumUniqueWords()); - EXPECT_TRUE(assertPostingList("[10]", fic.find("a", 0))); - EXPECT_TRUE(assertPostingList("[5]", fic.find("a", 1))); - EXPECT_TRUE(assertPostingList("[11,15]", fic.find("b", 0))); - EXPECT_TRUE(assertPostingList("[12]", fic.find("b", 1))); - EXPECT_TRUE(assertPostingList("[]", fic.find("a", 2))); - EXPECT_TRUE(assertPostingList("[]", fic.find("c", 0))); + EXPECT_TRUE(assertPostingList("[10]", find("a", 0))); + EXPECT_TRUE(assertPostingList("[5]", find("a", 1))); + EXPECT_TRUE(assertPostingList("[11,15]", find("b", 0))); + EXPECT_TRUE(assertPostingList("[12]", find("b", 1))); + EXPECT_TRUE(assertPostingList("[]", find("a", 2))); + EXPECT_TRUE(assertPostingList("[]", find("c", 0))); } TEST_F(FieldIndexTest, require_that_remove_works) @@ -622,16 +648,16 @@ TEST_F(FieldIndexCollectionTest, require_that_features_are_in_posting_lists) { WrapInserter(fic, 0).word("a").add(1, getFeatures(4, 2)).flush(); EXPECT_TRUE(assertPostingList("[1{4:0,1}]", - fic.find("a", 0), + find("a", 0), featureStorePtr(fic, 0))); WrapInserter(fic, 0).word("b").add(2, getFeatures(5, 1)). add(3, getFeatures(6, 2)).flush(); EXPECT_TRUE(assertPostingList("[2{5:0},3{6:0,1}]", - fic.find("b", 0), + find("b", 0), featureStorePtr(fic, 0))); WrapInserter(fic, 1).word("c").add(4, getFeatures(7, 2)).flush(); EXPECT_TRUE(assertPostingList("[4{7:0,1}]", - fic.find("c", 1), + find("c", 1), featureStorePtr(fic, 1))); } @@ -764,6 +790,12 @@ public: _inv(_schema, _invertThreads, _pushThreads, _fic) { } + PostingList::Iterator find(const vespalib::stringref word, uint32_t fieldId) const { + return find_in_field_index(word, fieldId, _fic); + } + PostingList::ConstIterator findFrozen(const vespalib::stringref word, uint32_t fieldId) const { + return find_frozen_in_field_index(word, fieldId, _fic); + } }; class BasicInverterTest : public InverterTest { @@ -922,12 +954,12 @@ TEST_F(BasicInverterTest, require_that_inversion_is_working) TermFieldMatchDataArray matchData; matchData.add(&tfmd); { - PostingIterator itr(_fic.findFrozen("not", 0), featureStoreRef(_fic, 0), 0, matchData); + PostingIterator itr(findFrozen("not", 0), featureStoreRef(_fic, 0), 0, matchData); itr.initFullRange(); EXPECT_TRUE(itr.isAtEnd()); } { - PostingIterator itr(_fic.findFrozen("a", 0), featureStoreRef(_fic, 0), 0, matchData); + PostingIterator itr(findFrozen("a", 0), featureStoreRef(_fic, 0), 0, matchData); itr.initFullRange(); EXPECT_EQ(10u, itr.getDocId()); itr.unpack(10); @@ -944,19 +976,19 @@ TEST_F(BasicInverterTest, require_that_inversion_is_working) EXPECT_TRUE(itr.isAtEnd()); } { - PostingIterator itr(_fic.findFrozen("x", 0), featureStoreRef(_fic, 0), 0, matchData); + PostingIterator itr(findFrozen("x", 0), featureStoreRef(_fic, 0), 0, matchData); itr.initFullRange(); EXPECT_TRUE(itr.isAtEnd()); } { - PostingIterator itr(_fic.findFrozen("x", 1), featureStoreRef(_fic, 1), 1, matchData); + PostingIterator itr(findFrozen("x", 1), featureStoreRef(_fic, 1), 1, matchData); itr.initFullRange(); EXPECT_EQ(30u, itr.getDocId()); itr.unpack(30); EXPECT_EQ("{6:2[e=0,w=1,l=6]}", toString(tfmd.getIterator(), true, true)); } { - PostingIterator itr(_fic.findFrozen("x", 2), featureStoreRef(_fic, 2), 2, matchData); + PostingIterator itr(findFrozen("x", 2), featureStoreRef(_fic, 2), 2, matchData); itr.initFullRange(); EXPECT_EQ(30u, itr.getDocId()); itr.unpack(30); @@ -964,7 +996,7 @@ TEST_F(BasicInverterTest, require_that_inversion_is_working) EXPECT_EQ("{2:1[e=0,w=1,l=2]}", toString(tfmd.getIterator(), true, true)); } { - PostingIterator itr(_fic.findFrozen("x", 3), featureStoreRef(_fic, 3), 3, matchData); + PostingIterator itr(findFrozen("x", 3), featureStoreRef(_fic, 3), 3, matchData); itr.initFullRange(); EXPECT_EQ(30u, itr.getDocId()); itr.unpack(30); @@ -994,20 +1026,20 @@ TEST_F(BasicInverterTest, require_that_inverter_handles_remove_via_document_remo myPushDocument(_inv); _pushThreads.sync(); - EXPECT_TRUE(assertPostingList("[1]", _fic.find("a", 0))); - EXPECT_TRUE(assertPostingList("[1,2]", _fic.find("b", 0))); - EXPECT_TRUE(assertPostingList("[2]", _fic.find("c", 0))); - EXPECT_TRUE(assertPostingList("[1]", _fic.find("a", 1))); - EXPECT_TRUE(assertPostingList("[1]", _fic.find("c", 1))); + EXPECT_TRUE(assertPostingList("[1]", find("a", 0))); + EXPECT_TRUE(assertPostingList("[1,2]", find("b", 0))); + EXPECT_TRUE(assertPostingList("[2]", find("c", 0))); + EXPECT_TRUE(assertPostingList("[1]", find("a", 1))); + EXPECT_TRUE(assertPostingList("[1]", find("c", 1))); myremove(1, _inv, _invertThreads); _pushThreads.sync(); - EXPECT_TRUE(assertPostingList("[]", _fic.find("a", 0))); - EXPECT_TRUE(assertPostingList("[2]", _fic.find("b", 0))); - EXPECT_TRUE(assertPostingList("[2]", _fic.find("c", 0))); - EXPECT_TRUE(assertPostingList("[]", _fic.find("a", 1))); - EXPECT_TRUE(assertPostingList("[]", _fic.find("c", 1))); + EXPECT_TRUE(assertPostingList("[]", find("a", 0))); + EXPECT_TRUE(assertPostingList("[2]", find("b", 0))); + EXPECT_TRUE(assertPostingList("[2]", find("c", 0))); + EXPECT_TRUE(assertPostingList("[]", find("a", 1))); + EXPECT_TRUE(assertPostingList("[]", find("c", 1))); } Schema @@ -1161,7 +1193,7 @@ TEST_F(UriInverterTest, require_that_uri_indexing_is_working) matchData.add(&tfmd); { uint32_t fieldId = _schema.getIndexFieldId("iu"); - PostingIterator itr(_fic.findFrozen("not", fieldId), + PostingIterator itr(findFrozen("not", fieldId), featureStoreRef(_fic, fieldId), fieldId, matchData); itr.initFullRange(); @@ -1169,7 +1201,7 @@ TEST_F(UriInverterTest, require_that_uri_indexing_is_working) } { uint32_t fieldId = _schema.getIndexFieldId("iu"); - PostingIterator itr(_fic.findFrozen("example", fieldId), + PostingIterator itr(findFrozen("example", fieldId), featureStoreRef(_fic, fieldId), fieldId, matchData); itr.initFullRange(); @@ -1181,7 +1213,7 @@ TEST_F(UriInverterTest, require_that_uri_indexing_is_working) } { uint32_t fieldId = _schema.getIndexFieldId("iau"); - PostingIterator itr(_fic.findFrozen("example", fieldId), + PostingIterator itr(findFrozen("example", fieldId), featureStoreRef(_fic, fieldId), fieldId, matchData); itr.initFullRange(); @@ -1194,7 +1226,7 @@ TEST_F(UriInverterTest, require_that_uri_indexing_is_working) } { uint32_t fieldId = _schema.getIndexFieldId("iwu"); - PostingIterator itr(_fic.findFrozen("example", fieldId), + PostingIterator itr(findFrozen("example", fieldId), featureStoreRef(_fic, fieldId), fieldId, matchData); itr.initFullRange(); @@ -1247,16 +1279,16 @@ TEST_F(CjkInverterTest, require_that_cjk_indexing_is_working) matchData.add(&tfmd); uint32_t fieldId = _schema.getIndexFieldId("f0"); { - PostingIterator itr(_fic.findFrozen("not", fieldId), + PostingIterator itr(findFrozen("not", fieldId), featureStoreRef(_fic, fieldId), fieldId, matchData); itr.initFullRange(); EXPECT_TRUE(itr.isAtEnd()); } { - PostingIterator itr(_fic.findFrozen("我就" - "是那个", - fieldId), + PostingIterator itr(findFrozen("我就" + "是那个", + fieldId), featureStoreRef(_fic, fieldId), fieldId, matchData); itr.initFullRange(); @@ -1267,9 +1299,9 @@ TEST_F(CjkInverterTest, require_that_cjk_indexing_is_working) EXPECT_TRUE(itr.isAtEnd()); } { - PostingIterator itr(_fic.findFrozen("大灰" - "狼", - fieldId), + PostingIterator itr(findFrozen("大灰" + "狼", + fieldId), featureStoreRef(_fic, fieldId), fieldId, matchData); itr.initFullRange(); @@ -1315,9 +1347,9 @@ struct RemoverTest : public FieldIndexCollectionTest { void assertPostingLists(const vespalib::string &e1, const vespalib::string &e2, const vespalib::string &e3) { - EXPECT_TRUE(assertPostingList(e1, fic.find("a", 1))); - EXPECT_TRUE(assertPostingList(e2, fic.find("a", 2))); - EXPECT_TRUE(assertPostingList(e3, fic.find("b", 1))); + EXPECT_TRUE(assertPostingList(e1, find("a", 1))); + EXPECT_TRUE(assertPostingList(e2, find("a", 2))); + EXPECT_TRUE(assertPostingList(e3, find("b", 1))); } void remove(uint32_t docId) { DocumentInverter inv(schema, _invertThreads, _pushThreads, fic); |