aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp
index 8763d064c35..080129fe780 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp
@@ -1,4 +1,4 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "slime_filler.h"
#include "check_undefined_value_visitor.h"
@@ -285,6 +285,7 @@ SlimeFiller::visit(const WeightedSetFieldValue& value)
if (empty_or_empty_after_filtering(value)) {
return;
}
+ bool render_as_array = _string_converter != nullptr && _string_converter->render_weighted_set_as_array();
Cursor& a = _inserter.insertArray();
Symbol isym = a.resolve("item");
Symbol wsym = a.resolve("weight");
@@ -305,12 +306,18 @@ SlimeFiller::visit(const WeightedSetFieldValue& value)
}
++matching_elements_itr;
}
- Cursor& o = a.addObject();
- ObjectSymbolInserter ki(o, isym);
- SlimeFiller conv(ki);
- entry.first->accept(conv);
- int weight = static_cast<const IntFieldValue&>(*entry.second).getValue();
- o.setLong(wsym, weight);
+ if (render_as_array) {
+ ArrayInserter ai(a);
+ SlimeFiller conv(ai, _string_converter, SlimeFillerFilter::all());
+ entry.first->accept(conv);
+ } else {
+ Cursor& o = a.addObject();
+ ObjectSymbolInserter ki(o, isym);
+ SlimeFiller conv(ki);
+ entry.first->accept(conv);
+ int weight = static_cast<const IntFieldValue&>(*entry.second).getValue();
+ o.setLong(wsym, weight);
+ }
++idx;
}
}
@@ -335,12 +342,12 @@ SlimeFiller::visit(const ReferenceFieldValue& value)
}
void
-SlimeFiller::insert_summary_field(const FieldValue& value, vespalib::slime::Inserter& inserter)
+SlimeFiller::insert_summary_field(const FieldValue& value, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter)
{
CheckUndefinedValueVisitor check_undefined;
value.accept(check_undefined);
if (!check_undefined.is_undefined()) {
- SlimeFiller visitor(inserter);
+ SlimeFiller visitor(inserter, converter, SlimeFillerFilter::all());
value.accept(visitor);
}
}
@@ -357,12 +364,12 @@ SlimeFiller::insert_summary_field_with_filter(const FieldValue& value, vespalib:
}
void
-SlimeFiller::insert_summary_field_with_field_filter(const document::FieldValue& value, vespalib::slime::Inserter& inserter, const SlimeFillerFilter* filter)
+SlimeFiller::insert_summary_field_with_field_filter(const document::FieldValue& value, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter, const SlimeFillerFilter* filter)
{
CheckUndefinedValueVisitor check_undefined;
value.accept(check_undefined);
if (!check_undefined.is_undefined()) {
- SlimeFiller visitor(inserter, nullptr, (filter != nullptr) ? filter->begin() : SlimeFillerFilter::all());
+ SlimeFiller visitor(inserter, converter, (filter != nullptr) ? filter->begin() : SlimeFillerFilter::all());
value.accept(visitor);
}
}