summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-06-05 14:09:54 +0200
committerGitHub <noreply@github.com>2019-06-05 14:09:54 +0200
commite31ba22c2997a3294fc8979e3b9085485964a278 (patch)
tree5fd315d66a55741886e5035e8aab5a2b9281f00c /searchlib
parentfe1a5ab9f27b7be4d15aaf2ee640e86e79701e14 (diff)
parent0790470c3b7801160272af7ef1327a522c71eade (diff)
Merge pull request #9685 from vespa-engine/toregge/unit-test-field-inverter-using-field-length-calculator
Test that field inverter uses field length calculator.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp31
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/field_inverter.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp6
3 files changed, 36 insertions, 7 deletions
diff --git a/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp b/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp
index c3b5b39b8d0..f741d902d3e 100644
--- a/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp
+++ b/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp
@@ -120,7 +120,7 @@ struct Fixture
WordStore _word_store;
FieldIndexRemover _remover;
test::OrderedFieldIndexInserter _inserter;
- FieldLengthCalculator _calculator;
+ std::vector<std::unique_ptr<FieldLengthCalculator>> _calculators;
std::vector<std::unique_ptr<FieldInverter> > _inverters;
static Schema
@@ -140,16 +140,17 @@ struct Fixture
_word_store(),
_remover(_word_store),
_inserter(),
- _calculator(),
+ _calculators(),
_inverters()
{
for (uint32_t fieldId = 0; fieldId < _schema.getNumIndexFields();
++fieldId) {
+ _calculators.emplace_back(std::make_unique<FieldLengthCalculator>());
_inverters.push_back(std::make_unique<FieldInverter>(_schema,
fieldId,
_remover,
_inserter,
- _calculator));
+ *_calculators.back()));
}
}
@@ -182,6 +183,14 @@ struct Fixture
inverter->removeDocument(docId);
}
}
+
+ void assert_calculator(uint32_t field_id, double exp_avg, uint32_t exp_samples) {
+ double epsilon = 0.000000001;
+ const auto &calc = *_calculators[field_id];
+ EXPECT_APPROX(exp_avg, calc.get_average_field_length(), epsilon);
+ EXPECT_EQUAL(exp_samples, calc.get_num_samples());
+ }
+
};
@@ -363,6 +372,22 @@ TEST_F("require that cheap features are calculated", Fixture)
f._inserter.toStr());
}
+TEST_F("require that average field length is calculated", Fixture)
+{
+ f.invertDocument(10, *makeDoc10(f._b));
+ f.pushDocuments();
+ TEST_DO(f.assert_calculator(0, 4.0, 1));
+ TEST_DO(f.assert_calculator(1, 0.0, 0));
+ f.invertDocument(11, *makeDoc11(f._b));
+ f.pushDocuments();
+ TEST_DO(f.assert_calculator(0, (4.0 + 4.0)/2, 2));
+ TEST_DO(f.assert_calculator(1, 2.0, 1));
+ f.invertDocument(12, *makeDoc12(f._b));
+ f.pushDocuments();
+ TEST_DO(f.assert_calculator(0, (4.0 + 4.0 + 2.0)/3, 3));
+ TEST_DO(f.assert_calculator(1, 2.0, 1));
+}
+
} // namespace memoryindex
} // namespace search
diff --git a/searchlib/src/vespa/searchlib/memoryindex/field_inverter.cpp b/searchlib/src/vespa/searchlib/memoryindex/field_inverter.cpp
index abd6fa61645..d68fae69a52 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/field_inverter.cpp
+++ b/searchlib/src/vespa/searchlib/memoryindex/field_inverter.cpp
@@ -428,11 +428,13 @@ FieldInverter::trimAbortedDocs()
void
FieldInverter::invertField(uint32_t docId, const FieldValue::UP &val)
{
- startDoc(docId);
if (val) {
+ startDoc(docId);
invertNormalDocTextField(*val);
+ endDoc();
+ } else {
+ removeDocument(docId);
}
- endDoc();
}
void
diff --git a/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp b/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp
index c185ec93c9d..e2206292fc6 100644
--- a/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp
+++ b/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp
@@ -341,11 +341,13 @@ UrlFieldInverter::invertUrlField(const FieldValue &val)
void
UrlFieldInverter::invertField(uint32_t docId, const FieldValue::UP &val)
{
- startDoc(docId);
if (val) {
+ startDoc(docId);
invertUrlField(*val);
+ endDoc();
+ } else {
+ removeDocument(docId);
}
- endDoc();
}
void