diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-09-03 20:39:43 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-09-03 20:39:43 +0200 |
commit | b040af00f48216b183eb5b9a5dd7b7b32efd0821 (patch) | |
tree | f06dd621c268c398911ea64ace945971e907544e /streamingvisitors | |
parent | ef44d786c39c6bb9d172e16ec9e61eaab2d99d6d (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.cpp | 28 |
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. } } } |