aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary
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 /searchsummary
parentef44d786c39c6bb9d172e16ec9e61eaab2d99d6d (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.cpp19
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.
}
}