diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-07-01 14:11:18 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-07-01 14:11:18 +0200 |
commit | 36cf61ddf65115ec0a3de958fdef6c656c337079 (patch) | |
tree | 246c94e1d80b1768fd68d8d4aeaebe084a1a261c /streamingvisitors | |
parent | 8541f542bbfed01d8aabf5eb87842c13e0649bc2 (diff) |
Empty docsummary output for undefined value.
Diffstat (limited to 'streamingvisitors')
-rw-r--r-- | streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp index ebbb8df3cf1..c425fc0b05e 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp @@ -2,6 +2,7 @@ #include "docsumfilter.h" #include "slimefieldwriter.h" +#include <vespa/searchsummary/docsummary/check_undefined_value_visitor.h> #include <vespa/searchsummary/docsummary/summaryfieldconverter.h> #include <vespa/document/base/exceptions.h> #include <vespa/document/fieldvalue/iteratorhandler.h> @@ -320,12 +321,19 @@ DocsumFilter::writeSlimeField(const DocsumFieldSpec & fieldSpec, LOG(debug, "writeSlimeField: About to write field '%d' as Slime: field value = '%s'", fieldId.getId(), fv->toString().c_str()); SlimeFieldWriter writer; + CheckUndefinedValueVisitor check_undefined; if (! fieldSpec.hasIdentityMapping()) { writer.setInputFields(fieldSpec.getInputFields()); + } else { + fv->accept(check_undefined); + } + if (!check_undefined.is_undefined()) { + writer.convert(*fv); + const vespalib::stringref out = writer.out(); + packer.AddLongString(out.data(), out.size()); + } else { + packer.AddEmpty(); } - writer.convert(*fv); - const vespalib::stringref out = writer.out(); - packer.AddLongString(out.data(), out.size()); } else { LOG(debug, "writeSlimeField: Field value not set for field '%d'", fieldId.getId()); packer.AddEmpty(); @@ -451,7 +459,13 @@ DocsumFilter::getMappedDocsum(uint32_t id) const DocsumFieldSpec::FieldIdentifier & fieldId = it->getInputFields()[0]; const document::FieldValue * field = doc.getField(fieldId.getId()); if (field != nullptr) { - writeField(*field, fieldId.getPath(), type, _packer); + CheckUndefinedValueVisitor check_undefined; + field->accept(check_undefined); + if (!check_undefined.is_undefined()) { + writeField(*field, fieldId.getPath(), type, _packer); + } else { + writeEmpty(type, _packer); // void input + } } else { writeEmpty(type, _packer); // void input } |