aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/ranking/SoftTimeout.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java9
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/Renderer.java4
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/FeatureData.java31
4 files changed, 36 insertions, 14 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/ranking/SoftTimeout.java b/container-search/src/main/java/com/yahoo/search/query/ranking/SoftTimeout.java
index 1bca3df4d77..0d47ef77ce5 100644
--- a/container-search/src/main/java/com/yahoo/search/query/ranking/SoftTimeout.java
+++ b/container-search/src/main/java/com/yahoo/search/query/ranking/SoftTimeout.java
@@ -45,7 +45,11 @@ public class SoftTimeout implements Cloneable {
this.enabled = enable;
}
- public Boolean getEnable() { return enabled; }
+ /** Returns whether softtimeout is enabled. Defauyt is true. */
+ public Boolean getEnable() {
+ if (enabled == null) return Boolean.TRUE;
+ return enabled;
+ }
/** Override the adaptive factor determined on the content nodes */
public void setFactor(double factor) {
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 2f241f9c7a3..4bcb48447db 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
@@ -18,6 +18,7 @@ import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.document.datatypes.TensorFieldValue;
import com.yahoo.document.json.JsonWriter;
import com.yahoo.lang.MutableBoolean;
+import com.yahoo.prelude.fastsearch.FastHit;
import com.yahoo.processing.Response;
import com.yahoo.processing.execution.Execution.Trace;
import com.yahoo.processing.rendering.AsynchronousSectionedRenderer;
@@ -39,6 +40,7 @@ import com.yahoo.search.result.Coverage;
import com.yahoo.search.result.DefaultErrorHit;
import com.yahoo.search.result.ErrorHit;
import com.yahoo.search.result.ErrorMessage;
+import com.yahoo.search.result.FeatureData;
import com.yahoo.search.result.Hit;
import com.yahoo.search.result.HitGroup;
import com.yahoo.search.result.NanNumber;
@@ -781,7 +783,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
}
private void renderFieldContents(Object field) throws IOException {
- if (field instanceof Inspectable) {
+ if (field instanceof Inspectable && ! (field instanceof FeatureData)) {
renderInspector(((Inspectable)field).inspect());
} else {
renderFieldContentsDirect(field);
@@ -799,6 +801,8 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
generator.writeTree((TreeNode) field);
} else if (field instanceof Tensor) {
renderTensor(Optional.of((Tensor)field));
+ } else if (field instanceof FeatureData) {
+ generator.writeRawValue(((FeatureData)field).toJson());
} else if (field instanceof Inspectable) {
renderInspectorDirect(((Inspectable)field).inspect());
} else if (field instanceof JsonProducer) {
@@ -811,8 +815,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
// the null below is the field which has already been written
((FieldValue) field).serialize(null, new JsonWriter(generator));
} else if (field instanceof JSONArray || field instanceof JSONObject) {
- // org.json returns null if the object would not result in
- // syntactically correct JSON
+ // org.json returns null if the object would not result in syntactically correct JSON
String s = field.toString();
if (s == null) {
generator.writeNull();
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/Renderer.java b/container-search/src/main/java/com/yahoo/search/rendering/Renderer.java
index c9b890e64f5..a5b51e60861 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/Renderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/Renderer.java
@@ -40,7 +40,7 @@ abstract public class Renderer extends com.yahoo.processing.rendering.Renderer<R
public final ListenableFuture<Boolean> render(OutputStream stream, Result response, Execution execution, Request request) {
Writer writer = null;
try {
- writer = createWriter(stream,response);
+ writer = createWriter(stream, response);
render(writer, response);
}
catch (IOException e) {
@@ -50,7 +50,7 @@ abstract public class Renderer extends com.yahoo.processing.rendering.Renderer<R
if (writer !=null)
try { writer.close(); } catch (IOException e2) {};
}
- SettableFuture<Boolean> completed=SettableFuture.create();
+ SettableFuture<Boolean> completed = SettableFuture.create();
completed.set(true);
return completed;
}
diff --git a/container-search/src/main/java/com/yahoo/search/result/FeatureData.java b/container-search/src/main/java/com/yahoo/search/result/FeatureData.java
index 7e5d6b12f30..1fd8f6e7e17 100644
--- a/container-search/src/main/java/com/yahoo/search/result/FeatureData.java
+++ b/container-search/src/main/java/com/yahoo/search/result/FeatureData.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* A wrapper for structured data representing feature values: A map of floats and tensors.
- * This class is not thread safe even when it is only consumed.
+ * This class is immutable but not thread safe.
*/
public class FeatureData implements Inspectable, JsonProducer {
@@ -26,6 +26,8 @@ public class FeatureData implements Inspectable, JsonProducer {
private Set<String> featureNames = null;
+ private String jsonForm = null;
+
public FeatureData(Inspector value) {
this.value = value;
}
@@ -39,14 +41,11 @@ public class FeatureData implements Inspectable, JsonProducer {
public Inspector inspect() { return value; }
@Override
- public String toString() {
- if (value.type() == Type.EMPTY) return "";
- return toJson();
- }
-
- @Override
public String toJson() {
- return writeJson(new StringBuilder()).toString();
+ if (jsonForm != null) return jsonForm;
+
+ jsonForm = writeJson(new StringBuilder()).toString();
+ return jsonForm;
}
@Override
@@ -95,6 +94,22 @@ public class FeatureData implements Inspectable, JsonProducer {
return featureNames;
}
+ @Override
+ public String toString() {
+ if (value.type() == Type.EMPTY) return "";
+ return toJson();
+ }
+
+ @Override
+ public int hashCode() { return toJson().hashCode(); }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if ( ! (other instanceof FeatureData)) return false;
+ return ((FeatureData)other).toJson().equals(this.toJson());
+ }
+
/** A JSON encoder which encodes DATA as a tensor */
private static class Encoder extends JsonRender.StringEncoder {