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 /searchsummary | |
parent | ef44d786c39c6bb9d172e16ec9e61eaab2d99d6d (diff) |
Catch attempts to access fields not present in document type when generating
document summary.
Diffstat (limited to 'searchsummary')
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp index 0a388f4de07..85ee1aa302d 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp @@ -3,6 +3,7 @@ #include "docsum_store_document.h" #include "check_undefined_value_visitor.h" #include "summaryfieldconverter.h" +#include <vespa/document/base/exceptions.h> #include <vespa/document/datatype/datatype.h> #include <vespa/document/fieldvalue/document.h> #include <vespa/vespalib/data/slime/inserter.h> @@ -23,8 +24,12 @@ DocsumStoreDocument::get_field_value(const vespalib::string& field_name) const 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 { + if (_document->getValue(field, *value)) { + return DocsumStoreFieldValue(std::move(value)); + } + } catch (document::FieldNotFoundException&) { + // Field was not found in document type. Return empty value. } } } @@ -45,9 +50,13 @@ DocsumStoreDocument::get_juniper_input(const vespalib::string& field_name) const void DocsumStoreDocument::insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const { - auto field_value = get_field_value(field_name); - if (field_value) { - SummaryFieldConverter::insert_summary_field(*field_value, inserter); + try { + auto field_value = get_field_value(field_name); + if (field_value) { + SummaryFieldConverter::insert_summary_field(*field_value, inserter); + } + } catch (document::FieldNotFoundException&) { + // Field was not found in document type. Don't insert anything. } } |