aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-09-03 20:39:43 +0200
committerTor Egge <Tor.Egge@online.no>2022-09-03 20:39:43 +0200
commitb040af00f48216b183eb5b9a5dd7b7b32efd0821 (patch)
treef06dd621c268c398911ea64ace945971e907544e /streamingvisitors
parentef44d786c39c6bb9d172e16ec9e61eaab2d99d6d (diff)
Catch attempts to access fields not present in document type when generating
document summary.
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
index a49eec1a869..9d3d390efe1 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
@@ -68,12 +68,16 @@ DocsumStoreVsmDocument::get_field_value(const vespalib::string& field_name) cons
assert((uint32_t) entry_idx < _result_class.GetNumEntries());
return _docsum_filter.get_summary_field(entry_idx, _vsm_document);
}
- const document::Field & field = _document->getField(field_name);
- auto value(field.getDataType().createFieldValue());
- if (value) {
- if (_document->getValue(field, *value)) {
- return DocsumStoreFieldValue(std::move(value));
+ try {
+ const document::Field & field = _document->getField(field_name);
+ auto value(field.getDataType().createFieldValue());
+ if (value) {
+ if (_document->getValue(field, *value)) {
+ return DocsumStoreFieldValue(std::move(value));
+ }
}
+ } catch (document::FieldNotFoundException&) {
+ // Field was not found in document type. Return empty value.
}
}
return {};
@@ -96,12 +100,16 @@ DocsumStoreVsmDocument::insert_summary_field(const vespalib::string& field_name,
_docsum_filter.insert_summary_field(entry_idx, _vsm_document, inserter);
return;
}
- const document::Field & field = _document->getField(field_name);
- auto value(field.getDataType().createFieldValue());
- if (value) {
- if (_document->getValue(field, *value)) {
- SummaryFieldConverter::insert_summary_field(*value, inserter);
+ try {
+ const document::Field & field = _document->getField(field_name);
+ auto value(field.getDataType().createFieldValue());
+ if (value) {
+ if (_document->getValue(field, *value)) {
+ SummaryFieldConverter::insert_summary_field(*value, inserter);
+ }
}
+ } catch (document::FieldNotFoundException&) {
+ // Field was not found in document type. Don't insert anything.
}
}
}