summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2023-01-14 18:41:49 +0100
committerJon Bratseth <bratseth@gmail.com>2023-01-14 18:41:49 +0100
commit416f596b150ec159717bfd2f9b2ef70e4d4cd3dd (patch)
treefd78cf0541670dd50e2dc3256c5b9755ced8f73e /container-search/src/main/java/com/yahoo/search/query
parenta289581cbf94ff6997356110b54bd6993e956b9e (diff)
Support direct tensor rendering
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/Presentation.java52
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java2
2 files changed, 42 insertions, 12 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/Presentation.java b/container-search/src/main/java/com/yahoo/search/query/Presentation.java
index fd4519fdbb0..b949d1edabd 100644
--- a/container-search/src/main/java/com/yahoo/search/query/Presentation.java
+++ b/container-search/src/main/java/com/yahoo/search/query/Presentation.java
@@ -77,6 +77,9 @@ public class Presentation implements Cloneable {
/** Whether to renders tensors in short form */
private boolean tensorShortForm = true;
+ /** Whether to renders tensors in short form */
+ private boolean tensorDirectValues = false; // TODO: Flip default on Vespa 9
+
/** Set of explicitly requested summary fields, instead of summary classes */
private Set<String> summaryFields = LazySet.newHashSet();
@@ -178,27 +181,41 @@ public class Presentation implements Cloneable {
/**
* Returns whether tensors should use short form in JSON and textual representations, see
- * <a href="https://docs.vespa.ai/en/reference/document-json-format.html#tensor">https://docs.vespa.ai/en/reference/document-json-format.html#tensor</a>
- * and <a href="https://docs.vespa.ai/en/reference/tensor.html#tensor-literal-form">https://docs.vespa.ai/en/reference/tensor.html#tensor-literal-form</a>.
+ * <a href="https://docs.vespa.ai/en/reference/document-json-format.html#tensor">https://docs.vespa.ai/en/reference/document-json-format.html#tensor</a>.
* Default is true.
*/
public boolean getTensorShortForm() { return tensorShortForm; }
+ /** @deprecated use setTensorFormat(). */
+ @Deprecated // TODO: Remove on Vespa 9
+ public void setTensorShortForm(String value) {
+ setTensorFormat(value);
+ }
/**
* Sets whether tensors should use short form in JSON and textual representations from a string.
*
* @param value a string which must be either 'short' or 'long'
* @throws IllegalArgumentException if any other value is passed
*/
- public void setTensorShortForm(String value) {
- tensorShortForm = toTensorShortForm(value);
- }
-
- private boolean toTensorShortForm(String value) {
- return switch (value) {
- case "short" -> true;
- case "long" -> false;
- default -> throw new IllegalArgumentException("Value must be 'long' or 'short', not '" + value + "'");
+ public void setTensorFormat(String value) {
+ switch (value) {
+ case "short" :
+ tensorShortForm = true;
+ tensorDirectValues = false;
+ break;
+ case "long" :
+ tensorShortForm = false;
+ tensorDirectValues = false;
+ break;
+ case "short-value" :
+ tensorShortForm = true;
+ tensorDirectValues = true;
+ break;
+ case "long-value" :
+ tensorShortForm = false;
+ tensorDirectValues = true;
+ break;
+ default : throw new IllegalArgumentException("Value must be 'long', 'short', 'long-value', or 'short-value', not '" + value + "'");
};
}
@@ -206,6 +223,19 @@ public class Presentation implements Cloneable {
this.tensorShortForm = tensorShortForm;
}
+ /**
+ * Returns whether tensor content should be rendered directly, or inside a JSON object containing a
+ * "type" entry having the tensor type, and a "cells"/"values"/"blocks" entry (depending on type),
+ * having the tensor content. See
+ * <a href="https://docs.vespa.ai/en/reference/document-json-format.html#tensor">https://docs.vespa.ai/en/reference/document-json-format.html#tensor</a>.
+ * Default is false: Render wrapped in a JSON object.
+ */
+ public boolean getTensorDirectValues() { return tensorDirectValues; }
+
+ public void setTensorDirectValues(boolean tensorDirectValues) {
+ this.tensorDirectValues = tensorDirectValues;
+ }
+
/** Prepares this for binary serialization. For internal use - see {@link Query#prepare} */
public void prepare() {
if (highlight != null)
diff --git a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
index d5dc8120f29..e4a83972fae 100644
--- a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
+++ b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
@@ -303,7 +303,7 @@ public class QueryProperties extends Properties {
}
else if (key.size() == 3 && key.get(1).equals(Presentation.FORMAT)) {
if (key.last().equals(Presentation.TENSORS))
- query.getPresentation().setTensorShortForm(asString(value, "short"));
+ query.getPresentation().setTensorFormat(asString(value, "short")); // TODO: Switch default to short-value on Vespa 9
else
throwIllegalParameter(key.last(), Presentation.FORMAT);
}