summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java
index 761cb22be57..a463fb9d0e6 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java
@@ -9,6 +9,7 @@ import com.yahoo.prelude.query.Item;
import com.yahoo.prelude.query.NullItem;
import com.yahoo.prelude.query.textualrepresentation.TextualQueryRepresentation;
import com.yahoo.prelude.querytransform.QueryRewrite;
+import com.yahoo.processing.IllegalInputException;
import com.yahoo.protect.Validator;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
@@ -212,13 +213,26 @@ public abstract class VespaBackend {
List<Result> parts = partitionHits(result, summaryClass);
if (!parts.isEmpty()) { // anything to fill at all?
for (Result r : parts) {
- doPartialFill(r, summaryClass);
+ doPartialFill(r, ensureLegalSummaryClass(r.getQuery(), summaryClass));
mergeErrorsInto(result, r);
}
result.hits().setSorted(false);
result.analyzeHits();
}
}
+ protected String ensureLegalSummaryClass(Query query, String summaryClass) {
+ if (summaryClass != null) {
+ if (summaryClass.isEmpty()) {
+ return null;
+ } else {
+ var db = getDocumentDatabase(query);
+ if (db != null && ! db.getDocsumDefinitionSet().hasDocsum(summaryClass)) {
+ throw new IllegalInputException("invalid presentation.summary=" + summaryClass);
+ }
+ }
+ }
+ return summaryClass;
+ }
private void mergeErrorsInto(Result destination, Result source) {
destination.hits().addErrorsFrom(source.hits());