summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java25
1 files changed, 10 insertions, 15 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
index 31f99ab1927..352a31553e7 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
@@ -45,6 +45,7 @@ import com.yahoo.search.result.Hit;
import com.yahoo.search.result.HitGroup;
import com.yahoo.search.result.NanNumber;
import com.yahoo.tensor.Tensor;
+import com.yahoo.tensor.TensorType;
import com.yahoo.tensor.serialization.JsonFormat;
import java.io.IOException;
@@ -132,6 +133,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
volatile boolean jsonMapsAll = true;
volatile boolean jsonWsetsAll = false;
volatile boolean tensorShortForm = true;
+ volatile boolean tensorDirectValues = false;
boolean convertDeep() { return (jsonDeepMaps || jsonWsets); }
void init() {
this.debugRendering = false;
@@ -140,6 +142,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
this.jsonMapsAll = true;
this.jsonWsetsAll = true;
this.tensorShortForm = true;
+ this.tensorDirectValues = false;
}
void getSettings(Query q) {
if (q == null) {
@@ -154,7 +157,8 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
this.jsonMapsAll = props.getBoolean(WRAP_DEEP_MAPS, true);
this.jsonWsetsAll = props.getBoolean(WRAP_WSETS, true);
this.tensorShortForm = q.getPresentation().getTensorShortForm();
- }
+ this.tensorDirectValues = q.getPresentation().getTensorDirectValues();
+ }
}
private volatile FieldConsumerSettings fieldConsumerSettings;
@@ -776,7 +780,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
} else if (field instanceof Tensor) {
renderTensor(Optional.of((Tensor)field));
} else if (field instanceof FeatureData) {
- generator().writeRawValue(((FeatureData)field).toJson(settings.tensorShortForm));
+ generator().writeRawValue(((FeatureData)field).toJson(settings.tensorShortForm, settings.tensorDirectValues));
} else if (field instanceof Inspectable) {
renderInspectorDirect(((Inspectable)field).inspect());
} else if (field instanceof JsonProducer) {
@@ -814,24 +818,15 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
}
private void renderTensor(Optional<Tensor> tensor) throws IOException {
- if (tensor.isEmpty()) {
- generator().writeStartObject();
- generator().writeArrayFieldStart("cells");
- generator().writeEndArray();
- generator().writeEndObject();
- return;
- }
- if (settings.tensorShortForm) {
- generator().writeRawValue(new String(JsonFormat.encodeShortForm(tensor.get()), StandardCharsets.UTF_8));
- } else {
- generator().writeRawValue(new String(JsonFormat.encode(tensor.get()), StandardCharsets.UTF_8));
- }
+ generator().writeRawValue(new String(JsonFormat.encode(tensor.orElse(Tensor.Builder.of(TensorType.empty).build()),
+ settings.tensorShortForm, settings.tensorDirectValues),
+ StandardCharsets.UTF_8));
}
private JsonGenerator generator() {
if (generator == null)
throw new UnsupportedOperationException("Generator required but not assigned. " +
- "All accept() methods must be overridden when sub-classing FieldConsumer");
+ "All accept() methods must be overridden when sub-classing FieldConsumer");
return generator;
}