diff options
Diffstat (limited to 'searchsummary')
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp | 6 | ||||
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp | 20 |
2 files changed, 18 insertions, 8 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp index 19dd096c46c..1ca1a336d2d 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp @@ -149,9 +149,13 @@ MultiAttrDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType, Inser using vespalib::slime::Cursor; using vespalib::Memory; const IAttributeVector & v = vec(*state); - uint32_t entries = v.getValueCount(docid); bool isWeightedSet = v.hasWeightedSetType(); + uint32_t entries = v.getValueCount(docid); + if (entries == 0) { + return; // Don't insert empty fields + } + Cursor &arr = target.insertArray(); BasicType::Type t = v.getBasicType(); switch (t) { diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp index 91a7fd45061..72cedb05f7c 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp @@ -231,10 +231,6 @@ class SummaryFieldValueConverter : protected ConstFieldValueVisitor FieldValue::UP _field_value; FieldValueConverter &_structuredFieldConverter; - void visit(const ArrayFieldValue &value) override { - _field_value = _structuredFieldConverter.convert(value); - } - template <typename T> void visitPrimitive(const T &t) { _field_value.reset(t.clone()); @@ -274,8 +270,16 @@ class SummaryFieldValueConverter : protected ConstFieldValueVisitor visitPrimitive(value); } - void visit(const MapFieldValue & v) override { - _field_value = _structuredFieldConverter.convert(v); + void visit(const ArrayFieldValue &value) override { + if (value.size() > 0) { + _field_value = _structuredFieldConverter.convert(value); + } // else: implicit empty string + } + + void visit(const MapFieldValue & value) override { + if (value.size() > 0) { + _field_value = _structuredFieldConverter.convert(value); + } // else: implicit empty string } void visit(const StructFieldValue &value) override { @@ -292,7 +296,9 @@ class SummaryFieldValueConverter : protected ConstFieldValueVisitor } void visit(const WeightedSetFieldValue &value) override { - _field_value = _structuredFieldConverter.convert(value); + if (value.size() > 0) { + _field_value = _structuredFieldConverter.convert(value); + } // else: implicit empty string } void visit(const TensorFieldValue &value) override { |