summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp
diff options
context:
space:
mode:
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.cpp112
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);