summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2021-10-08 12:26:03 +0000
committerArne H Juul <arnej@yahooinc.com>2021-10-08 12:26:06 +0000
commitf5d36485496d2cffb14962e30224dbf0f7a05f52 (patch)
tree32a45934035f1d9d36d2895f7cabd1cb46a7e8a1 /container-search
parentdaaf9321988ba1ba0fd81ee3853fdd51dc692f26 (diff)
Continue grouping even when there is an error
* If a grouping pass result includes an error, that does not necessarily mean we should give up entirely and throw away all grouping results. * Instead, just merge errors into the main results just like all the other errors.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java16
-rw-r--r--container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingExecutorTestCase.java2
2 files changed, 6 insertions, 12 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
index d34d5594ef7..21db47908a8 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java
@@ -210,7 +210,6 @@ public class GroupingExecutor extends Searcher {
// Perform multi-pass query to complete all grouping requests.
Item origRoot = query.getModel().getQueryTree().getRoot();
- int prePassErrors = query.errors().size();
Result ret = null;
Item baseRoot = origRoot;
if (lastPass > 0) {
@@ -247,20 +246,15 @@ public class GroupingExecutor extends Searcher {
}
setGroupingList(query, passList);
Result passResult = execution.search(query);
- if (passResult.hits().getError() != null) {
- if (firstPass) {
- if (passResult.hits().getErrorHit().errors().size() > prePassErrors ||
- passResult.hits().getErrorHit().errors().size() == 0) {
- return passResult;
- }
- } else {
- return passResult;
- }
- }
Map<Integer, Grouping> passGroupingMap = mergeGroupingResults(passResult);
mergeGroupingMaps(groupingMap, passGroupingMap);
if (firstPass) {
ret = passResult;
+ } else {
+ ErrorMessage err = passResult.hits().getError();
+ if (err != null) {
+ ret.hits().addError(err);
+ }
}
}
if (log.isLoggable(Level.FINE)) {
diff --git a/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingExecutorTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingExecutorTestCase.java
index 1ba34480e60..4c5f3f2bd79 100644
--- a/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingExecutorTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingExecutorTestCase.java
@@ -363,7 +363,7 @@ public class GroupingExecutorTestCase {
res = exec.search(query);
assertTrue(res.hits().getError() != null);
assertEquals(Error.TIMEOUT.code, res.hits().getError().getCode());
- assertFalse(err.continuedOnFail);
+ assertTrue(err.continuedOnFail);
}
@Test