summaryrefslogtreecommitdiffstats
path: root/container-search/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-02-09 10:41:23 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2024-02-09 10:44:44 +0100
commit5abaceb7f7ae65aa0060c3141610aa82498a19d9 (patch)
tree0c10379d314948ffe91543c1d4c96c00da3b33a2 /container-search/src
parent16a5444d2acda3baff9b21dd624c1f94018e0254 (diff)
- Let there only be one way to wire query to the grouping hits.
Enforce that by requiring it in the constructor. - Carry the DocumentDatabase along, not only the DocusumDefinitionSet.
Diffstat (limited to 'container-search/src')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinitionSet.java6
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/DocumentDatabase.java10
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java16
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java21
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java10
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java3
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java25
-rw-r--r--container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingSearcher.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/grouping/result/FlatteningSearcherTestCase.java4
-rw-r--r--container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingExecutorTestCase.java63
-rw-r--r--container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java40
12 files changed, 91 insertions, 111 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinitionSet.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinitionSet.java
index 55601059901..adfb1d06ae3 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinitionSet.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumDefinitionSet.java
@@ -35,8 +35,8 @@ public final class DocsumDefinitionSet {
public DocsumDefinitionSet(Collection<DocumentSummary> docsumDefinitions) {
this.definitionsByName = docsumDefinitions.stream()
- .map(summary -> new DocsumDefinition(summary))
- .collect(Collectors.toUnmodifiableMap(summary -> summary.name(),
+ .map(DocsumDefinition::new)
+ .collect(Collectors.toUnmodifiableMap(DocsumDefinition::name,
summary -> summary));
}
@@ -95,7 +95,7 @@ public final class DocsumDefinitionSet {
public String toString() {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, DocsumDefinition> e : definitionsByName.entrySet() ) {
- if (sb.length() != 0) {
+ if (!sb.isEmpty()) {
sb.append(",");
}
sb.append("[").append(e.getKey()).append(",").append(e.getValue().name()).append("]");
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocumentDatabase.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocumentDatabase.java
index 8d1c3bcd678..ea6b6a8ee38 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocumentDatabase.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocumentDatabase.java
@@ -1,16 +1,8 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.prelude.fastsearch;
-import com.yahoo.search.schema.RankProfile;
import com.yahoo.search.schema.Schema;
-import com.yahoo.search.schema.SchemaInfo;
-import com.yahoo.tensor.TensorType;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
+
/**
* Representation of a document database realizing a schema in a content cluster.
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java
index 11fbedfc0dd..7e60f8a41b6 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java
@@ -3,28 +3,32 @@ package com.yahoo.prelude.fastsearch;
import java.util.List;
+import com.yahoo.search.Query;
import com.yahoo.search.result.Hit;
+import com.yahoo.search.schema.Schema;
import com.yahoo.searchlib.aggregation.Grouping;
public class GroupingListHit extends Hit {
/** for unit tests only, may give problems if grouping contains docsums */
public GroupingListHit(List<Grouping> groupingList) {
- this(groupingList, null);
+ this(groupingList, null, null);
}
- public GroupingListHit(List<Grouping> groupingList, DocsumDefinitionSet defs) {
- super("meta:grouping", 0);
+ public GroupingListHit(List<Grouping> groupingList, DocumentDatabase documentDatabase, Query query) {
+ super("meta:grouping", 0, query);
this.groupingList = groupingList;
- this.defs = defs;
+ this.documentDatabase = documentDatabase;
}
public boolean isMeta() { return true; }
public List<Grouping> getGroupingList() { return groupingList; }
- public DocsumDefinitionSet getDocsumDefinitionSet() { return defs; }
+ public DocsumDefinitionSet getDocsumDefinitionSet() { return documentDatabase.getDocsumDefinitionSet(); }
+ public Schema getSchema() { return documentDatabase.schema(); }
+ public DocumentDatabase getDocumentDatBase() { return documentDatabase; }
private final List<Grouping> groupingList;
- private final DocsumDefinitionSet defs;
+ private final DocumentDatabase documentDatabase;
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java b/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java
index 927fa37cc77..3c4e8107df5 100644
--- a/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java
@@ -83,9 +83,7 @@ public class JuniperSearcher extends Searcher {
List<Hit> hits = new ArrayList<>(worstCase);
for (Iterator<Hit> i = result.hits().deepIterator(); i.hasNext();) {
Hit hit = i.next();
- if ( ! (hit instanceof FastHit)) continue;
-
- FastHit fastHit = (FastHit)hit;
+ if ( ! (hit instanceof FastHit fastHit)) continue;
if (fastHit.isFilled(summaryClass)) continue;
hits.add(fastHit);
@@ -99,9 +97,8 @@ public class JuniperSearcher extends Searcher {
String summaryClass, IndexFacts.Session indexFacts) {
while (hitsToHighlight.hasNext()) {
Hit hit = hitsToHighlight.next();
- if ( ! (hit instanceof FastHit)) continue;
+ if ( ! (hit instanceof FastHit fastHit)) continue;
- FastHit fastHit = (FastHit) hit;
if (summaryClass != null && ! fastHit.isFilled(summaryClass)) continue;
Object searchDefinitionField = fastHit.getField(Hit.SDDOCNAME_FIELD);
@@ -125,9 +122,9 @@ public class JuniperSearcher extends Searcher {
private class StringArrayConverter implements ArrayTraverser {
- private Index index;
- private boolean bolding;
- private Value.ArrayValue convertedField = new Value.ArrayValue();
+ private final Index index;
+ private final boolean bolding;
+ private final Value.ArrayValue convertedField = new Value.ArrayValue();
/**
* This converts the backend binary highlighting of each item in an array of string field,
@@ -189,8 +186,8 @@ public class JuniperSearcher extends Searcher {
}
if (newFieldParts != null) {
i.remove();
- for (Iterator<FieldPart> j = newFieldParts.iterator(); j.hasNext();) {
- i.add(j.next());
+ for (FieldPart newFieldPart : newFieldParts) {
+ i.add(newFieldPart);
}
}
}
@@ -220,7 +217,7 @@ public class JuniperSearcher extends Searcher {
if (insideHighlight) {
newFieldParts.add(new BoldCloseFieldPart(boldCloseTag));
} else {
- if (newFieldParts.size() > 0
+ if (!newFieldParts.isEmpty()
&& newFieldParts.get(newFieldParts.size() - 1) instanceof BoldCloseFieldPart) {
newFieldParts.remove(newFieldParts.size() - 1);
} else {
@@ -230,7 +227,7 @@ public class JuniperSearcher extends Searcher {
}
}
- private List<FieldPart> initFieldParts(List<FieldPart> newFieldParts) {
+ private static List<FieldPart> initFieldParts(List<FieldPart> newFieldParts) {
if (newFieldParts == null)
newFieldParts = new ArrayList<>();
return newFieldParts;
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java b/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
index 8db0ec46f95..8311c84930e 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
@@ -1,7 +1,7 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.dispatch;
-import com.yahoo.prelude.fastsearch.DocsumDefinitionSet;
+import com.yahoo.prelude.fastsearch.DocumentDatabase;
import com.yahoo.prelude.fastsearch.GroupingListHit;
import com.yahoo.search.Query;
import com.yahoo.searchlib.aggregation.Grouping;
@@ -23,13 +23,13 @@ class GroupingResultAggregator {
private static final Logger log = Logger.getLogger(GroupingResultAggregator.class.getName());
private final Map<Integer, Grouping> groupings = new LinkedHashMap<>();
- private DocsumDefinitionSet docsumDefinitions = null;
+ private DocumentDatabase documentDatabase = null;
private Query query = null;
private int groupingHitsMerged = 0;
void mergeWith(GroupingListHit result) {
++groupingHitsMerged;
- if (docsumDefinitions == null) docsumDefinitions = result.getDocsumDefinitionSet();
+ if (documentDatabase == null) documentDatabase = result.getDocumentDatBase();
if (query == null) query = result.getQuery();
log.log(Level.FINE, () ->
String.format("Merging hit #%d having %d groupings",
@@ -46,8 +46,8 @@ class GroupingResultAggregator {
if (groupingHitsMerged == 0) return Optional.empty();
log.log(Level.FINE, () ->
String.format("Creating aggregated hit containing %d groupings from %d hits with docsums '%s' and %s",
- groupings.size(), groupingHitsMerged, docsumDefinitions, query));
- GroupingListHit groupingHit = new GroupingListHit(List.copyOf(groupings.values()), docsumDefinitions);
+ groupings.size(), groupingHitsMerged, documentDatabase.getDocsumDefinitionSet(), query));
+ GroupingListHit groupingHit = new GroupingListHit(List.copyOf(groupings.values()), documentDatabase, query);
groupingHit.setQuery(query);
groupingHit.getGroupingList().forEach(g -> {
g.select(o -> o instanceof Hit, o -> ((Hit)o).setContext(groupingHit));
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
index 9cad9d19f4c..9da4c91cd16 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
@@ -255,8 +255,7 @@ public class ProtobufSerialization {
g.deserialize(buf);
list.add(g);
}
- GroupingListHit hit = new GroupingListHit(list, documentDatabase.getDocsumDefinitionSet());
- hit.setQuery(query);
+ GroupingListHit hit = new GroupingListHit(list, documentDatabase, query);
result.getResult().hits().add(hit);
}
for (var replyHit : protobuf.getHitsList()) {
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 3b5399fccc9..be4f2f786e5 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
@@ -91,7 +91,7 @@ public class GroupingExecutor extends Searcher {
Result result = performSearch(query, execution, groupingMap);
// Convert Vespa style results to hits.
- HitConverter hitConverter = new HitConverter(this, query);
+ HitConverter hitConverter = new HitConverter(this);
for (RequestContext context : requestContextList) {
RootGroup group = convertResult(context, groupingMap, hitConverter);
result.hits().add(group);
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java
index 13d635b5772..94e0b5913d3 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java
@@ -4,7 +4,6 @@ package com.yahoo.search.grouping.vespa;
import com.yahoo.prelude.fastsearch.DocsumDefinitionSet;
import com.yahoo.prelude.fastsearch.FastHit;
import com.yahoo.prelude.fastsearch.GroupingListHit;
-import com.yahoo.search.Query;
import com.yahoo.search.Searcher;
import com.yahoo.search.result.Hit;
import com.yahoo.search.result.Relevance;
@@ -19,17 +18,14 @@ import com.yahoo.searchlib.aggregation.VdsHit;
class HitConverter implements ResultBuilder.HitConverter {
private final Searcher searcher;
- private final Query query;
/**
* Creates a new instance of this class.
*
* @param searcher The searcher that owns this converter.
- * @param query The query that returned the hits.
*/
- public HitConverter(Searcher searcher, Query query) {
+ public HitConverter(Searcher searcher) {
this.searcher = searcher;
- this.query = query;
}
@Override
@@ -59,19 +55,20 @@ class HitConverter implements ResultBuilder.HitConverter {
}
private Hit convertVdsHit(String summaryClass, VdsHit grpHit) {
- FastHit ret = new FastHit();
- ret.setRelevance(grpHit.getRank());
+ FastHit hit = new FastHit();
+ hit.setRelevance(grpHit.getRank());
if (grpHit.getSummary().getData().length > 0) {
- GroupingListHit ctxHit = (GroupingListHit)grpHit.getContext();
- if (ctxHit == null) {
+ GroupingListHit hitContext = (GroupingListHit)grpHit.getContext();
+ if (hitContext == null) {
throw new NullPointerException("Hit has no context.");
}
- DocsumDefinitionSet defs = ctxHit.getDocsumDefinitionSet();
- defs.lazyDecode(summaryClass, grpHit.getSummary().getData(), ret);
- ret.setFilled(summaryClass);
- ret.setFilled(query.getPresentation().getSummary());
+ DocsumDefinitionSet defs = hitContext.getDocsumDefinitionSet();
+ defs.lazyDecode(summaryClass, grpHit.getSummary().getData(), hit);
+ hit.setFilled(summaryClass);
+ hit.setFilled(hitContext.getQuery().getPresentation().getSummary());
+ hit.setQuery(hitContext.getQuery());
}
- return ret;
+ return hit;
}
}
diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingSearcher.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingSearcher.java
index f7f3f97f3ac..e5674a80eac 100644
--- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingSearcher.java
@@ -245,7 +245,7 @@ public class StreamingSearcher extends VespaBackEndSearcher {
List<Grouping> groupingList = visitor.getGroupings();
lazyTrace(query, 8, "Grouping list=", groupingList);
if ( ! groupingList.isEmpty() ) {
- GroupingListHit groupHit = new GroupingListHit(groupingList, getDocsumDefinitionSet(query));
+ GroupingListHit groupHit = new GroupingListHit(groupingList, getDocumentDatabase(query), query);
result.hits().add(groupHit);
}
diff --git a/container-search/src/test/java/com/yahoo/search/grouping/result/FlatteningSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/result/FlatteningSearcherTestCase.java
index 7ec35151eab..9e8fcb0ea21 100644
--- a/container-search/src/test/java/com/yahoo/search/grouping/result/FlatteningSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/grouping/result/FlatteningSearcherTestCase.java
@@ -76,8 +76,8 @@ public class FlatteningSearcherTestCase {
Execution execution = newExecution(new FlatteningSearcher(),
new GroupingExecutor(ComponentId.fromString("grouping")),
new ResultProvider(List.of(
- new GroupingListHit(List.of(group0), null),
- new GroupingListHit(List.of(group1), null))),
+ new GroupingListHit(List.of(group0), null, query),
+ new GroupingListHit(List.of(group1), null, query))),
new HitsProvider(List.of(
new DefaultErrorHit("source 1", ErrorMessage.createBackendCommunicationError("backend communication error 1")),
new DefaultErrorHit("source 2", ErrorMessage.createBackendCommunicationError("backend communication error 1")))));
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 17ab3823d57..ef2ef9724a9 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
@@ -8,9 +8,7 @@ import com.yahoo.document.DocumentId;
import com.yahoo.document.GlobalId;
import com.yahoo.prelude.fastsearch.FastHit;
import com.yahoo.prelude.fastsearch.GroupingListHit;
-import com.yahoo.prelude.query.NotItem;
import com.yahoo.prelude.query.NullItem;
-import com.yahoo.prelude.query.WordItem;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
@@ -183,8 +181,8 @@ public class GroupingExecutorTestCase {
);
Execution exec = newExecution(new GroupingExecutor(),
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(grpA), null),
- new GroupingListHit(List.of(grpB), null))));
+ new GroupingListHit(List.of(grpA), null, query),
+ new GroupingListHit(List.of(grpB), null, query))));
Group grp = req.getResultGroup(exec.search(query));
assertEquals(1, grp.size());
Hit hit = grp.get(0);
@@ -216,8 +214,8 @@ public class GroupingExecutorTestCase {
);
Execution exec = newExecution(new GroupingExecutor(),
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(grpExpected), null),
- new GroupingListHit(List.of(grpUnexpected), null))));
+ new GroupingListHit(List.of(grpExpected), null, query),
+ new GroupingListHit(List.of(grpUnexpected), null, query))));
Group grp = req.getResultGroup(exec.search(query));
assertEquals(1, grp.size());
Hit hit = grp.get(0);
@@ -247,8 +245,8 @@ public class GroupingExecutorTestCase {
));
Execution exec = newExecution(new GroupingExecutor(),
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(grp0), null),
- new GroupingListHit(List.of(grp1), null))),
+ new GroupingListHit(List.of(grp0), null, query),
+ new GroupingListHit(List.of(grp1), null, query))),
new FillRequestThrower());
Result res = exec.search(query);
@@ -287,8 +285,8 @@ public class GroupingExecutorTestCase {
.addHit(new com.yahoo.searchlib.aggregation.FS4Hit()))));
Execution exec = newExecution(new GroupingExecutor(),
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(grp0), null),
- new GroupingListHit(List.of(grp1), null))),
+ new GroupingListHit(List.of(grp0), null, query),
+ new GroupingListHit(List.of(grp1), null, query))),
new FillErrorProvider());
Result res = exec.search(query);
exec.fill(res);
@@ -313,8 +311,8 @@ public class GroupingExecutorTestCase {
.addOrderBy(new AggregationRefNode(0), true)));
Result res = newExecution(new GroupingExecutor(),
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(grp), null),
- new GroupingListHit(List.of(grp), null)))).search(query);
+ new GroupingListHit(List.of(grp), null, query),
+ new GroupingListHit(List.of(grp), null, query)))).search(query);
GroupList groupList = (GroupList) req.getResultGroup(res).get(0);
assertEquals(1.0, groupList.get(0).getRelevance().getScore(), 1E-6);
@@ -342,8 +340,8 @@ public class GroupingExecutorTestCase {
Execution exec = newExecution(new GroupingExecutor(),
err,
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(grp0), null),
- new GroupingListHit(List.of(grp1), null))));
+ new GroupingListHit(List.of(grp0), null, query),
+ new GroupingListHit(List.of(grp1), null, query))));
Result res = exec.search(query);
assertNotNull(res.hits().getError());
assertEquals(Error.TIMEOUT.code, res.hits().getError().getCode());
@@ -353,8 +351,8 @@ public class GroupingExecutorTestCase {
exec = newExecution(new GroupingExecutor(),
err,
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(grp0), null),
- new GroupingListHit(List.of(grp1), null))));
+ new GroupingListHit(List.of(grp0), null, query),
+ new GroupingListHit(List.of(grp1), null, query))));
res = exec.search(query);
assertNotNull(res.hits().getError());
assertEquals(Error.TIMEOUT.code, res.hits().getError().getCode());
@@ -392,8 +390,8 @@ public class GroupingExecutorTestCase {
SummaryMapper sm = new SummaryMapper();
Execution exec = newExecution(new GroupingExecutor(),
new ResultProvider(Arrays.asList(
- new GroupingListHit(Arrays.asList(pass0A, pass0B), null),
- new GroupingListHit(Arrays.asList(pass1A, pass1B), null))),
+ new GroupingListHit(Arrays.asList(pass0A, pass0B), null, query),
+ new GroupingListHit(Arrays.asList(pass1A, pass1B), null, query))),
sm);
exec.fill(exec.search(query), "default");
assertEquals(2, sm.hitsBySummary.size());
@@ -436,8 +434,8 @@ public class GroupingExecutorTestCase {
.addHit(new com.yahoo.searchlib.aggregation.FS4Hit()))));
Execution exec = newExecution(new GroupingExecutor(),
new ResultProvider(Arrays.asList(
- new GroupingListHit(List.of(pass0), null),
- new GroupingListHit(List.of(pass1), null))));
+ new GroupingListHit(List.of(pass0), null, query),
+ new GroupingListHit(List.of(pass1), null, query))));
Result res = exec.search(query);
exec.fill(res);
@@ -457,7 +455,7 @@ public class GroupingExecutorTestCase {
.addChild(new com.yahoo.searchlib.aggregation.Group().setId(new StringResultNode("foo"))
.addAggregationResult(new HitsAggregationResult(1, "bar"))
));
- GroupingListHit pass0 = new GroupingListHit(List.of(grp), null);
+ GroupingListHit pass0 = new GroupingListHit(List.of(grp), null, queryA);
GlobalId gid = new GlobalId((new DocumentId("id:ns:type::1")).getGlobalId());
grp = new Grouping(0);
@@ -465,9 +463,8 @@ public class GroupingExecutorTestCase {
.addChild(new com.yahoo.searchlib.aggregation.Group().setId(new StringResultNode("foo"))
.addAggregationResult(new HitsAggregationResult(1, "bar").addHit(new com.yahoo.searchlib.aggregation.FS4Hit(4, gid, 6)))
));
- GroupingListHit pass1 = new GroupingListHit(List.of(grp), null);
Query queryB = newQuery(); // required by GroupingListHit.getSearchQuery()
- pass1.setQuery(queryB);
+ GroupingListHit pass1 = new GroupingListHit(List.of(grp), null, queryB);
QueryMapper qm = new QueryMapper();
Execution exec = newExecution(new GroupingExecutor(),
@@ -569,10 +566,10 @@ public class GroupingExecutorTestCase {
.addChild(new com.yahoo.searchlib.aggregation.Group().setId(new StringResultNode("uniqueC")).addAggregationResult(new MaxAggregationResult().setMax(new IntegerResultNode(7)).setTag(4)))
.addChild(new com.yahoo.searchlib.aggregation.Group().setId(new StringResultNode("common")).addAggregationResult(new MaxAggregationResult().setMax(new IntegerResultNode(11)).setTag(4)))
);
- resultsByDocumentType.put("typeA", List.of(new GroupingListHit(List.of(groupA1), null),
- new GroupingListHit(List.of(groupA2), null)));
- resultsByDocumentType.put("typeB", List.of(new GroupingListHit(List.of(groupB1), null),
- new GroupingListHit(List.of(groupB2), null)));
+ resultsByDocumentType.put("typeA", List.of(new GroupingListHit(List.of(groupA1), null, query),
+ new GroupingListHit(List.of(groupA2), null, query)));
+ resultsByDocumentType.put("typeB", List.of(new GroupingListHit(List.of(groupB1), null, query),
+ new GroupingListHit(List.of(groupB2), null, query)));
Execution execution = newExecution(new GroupingExecutor(),
new MockClusterSearcher(),
new MultiDocumentTypeResultProvider(resultsByDocumentType));
@@ -742,11 +739,7 @@ public class GroupingExecutorTestCase {
for (Iterator<Hit> it = result.hits().deepIterator(); it.hasNext();) {
Hit hit = it.next();
Query query = hit.getQuery();
- List<Hit> lst = hitsByQuery.get(query);
- if (lst == null) {
- lst = new LinkedList<>();
- hitsByQuery.put(query, lst);
- }
+ List<Hit> lst = hitsByQuery.computeIfAbsent(query, k -> new LinkedList<>());
lst.add(hit);
}
}
@@ -767,11 +760,7 @@ public class GroupingExecutorTestCase {
public void fill(Result result, String summaryClass, Execution exec) {
for (Iterator<Hit> it = result.hits().deepIterator(); it.hasNext();) {
Hit hit = it.next();
- List<Hit> lst = hitsBySummary.get(summaryClass);
- if (lst == null) {
- lst = new LinkedList<>();
- hitsBySummary.put(summaryClass, lst);
- }
+ List<Hit> lst = hitsBySummary.computeIfAbsent(summaryClass, k -> new LinkedList<>());
lst.add(hit);
}
}
diff --git a/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java
index 8f775e9923a..57f6ee7d65f 100644
--- a/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java
@@ -4,8 +4,8 @@ package com.yahoo.search.grouping.vespa;
import com.yahoo.document.DocumentId;
import com.yahoo.document.GlobalId;
import com.yahoo.net.URI;
+import com.yahoo.prelude.fastsearch.DocumentDatabase;
import com.yahoo.prelude.fastsearch.GroupingListHit;
-import com.yahoo.prelude.fastsearch.DocsumDefinitionSet;
import com.yahoo.prelude.fastsearch.FastHit;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
@@ -19,7 +19,7 @@ import com.yahoo.searchlib.aggregation.FS4Hit;
import com.yahoo.searchlib.aggregation.VdsHit;
import org.junit.jupiter.api.Test;
-import java.util.Collections;
+import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@@ -34,24 +34,24 @@ public class HitConverterTestCase {
@Test
void requireThatHitsAreConverted() {
- HitConverter converter = new HitConverter(new MySearcher(), new Query());
- Hit hit = converter.toSearchHit("default", new FS4Hit(1, createGlobalId(2), 3).setContext(context()));
+ Query query = new Query();
+ HitConverter converter = new HitConverter(new MySearcher());
+ Hit hit = converter.toSearchHit("default", new FS4Hit(1, createGlobalId(2), 3).setContext(context(query)));
assertNotNull(hit);
assertEquals(new URI("index:null/1/" + asHexString(createGlobalId(2))), hit.getId());
- hit = converter.toSearchHit("default", new FS4Hit(4, createGlobalId(5), 6).setContext(context()));
+ hit = converter.toSearchHit("default", new FS4Hit(4, createGlobalId(5), 6).setContext(context(query)));
assertNotNull(hit);
assertEquals(new URI("index:null/4/" + asHexString(createGlobalId(5))), hit.getId());
}
@Test
void requireThatContextDataIsCopied() {
- Hit ctxHit = context();
- ctxHit.setSource("69");
Query ctxQuery = new Query();
- ctxHit.setQuery(ctxQuery);
+ Hit ctxHit = context(ctxQuery);
+ ctxHit.setSource("69");
- HitConverter converter = new HitConverter(new MySearcher(), new Query());
+ HitConverter converter = new HitConverter(new MySearcher());
Hit hit = converter.toSearchHit("default", new FS4Hit(1, createGlobalId(2), 3).setContext(ctxHit));
assertNotNull(hit);
assertTrue(hit instanceof FastHit);
@@ -63,9 +63,10 @@ public class HitConverterTestCase {
@Test
void requireThatSummaryClassIsSet() {
+ Query query = new Query();
Searcher searcher = new MySearcher();
- HitConverter converter = new HitConverter(searcher, new Query());
- Hit hit = converter.toSearchHit("69", new FS4Hit(1, createGlobalId(2), 3).setContext(context()));
+ HitConverter converter = new HitConverter(searcher);
+ Hit hit = converter.toSearchHit("69", new FS4Hit(1, createGlobalId(2), 3).setContext(context(query)));
assertNotNull(hit);
assertTrue(hit instanceof FastHit);
assertEquals("69", hit.getSearcherSpecificMetaData(searcher));
@@ -73,7 +74,7 @@ public class HitConverterTestCase {
@Test
void requireThatHitHasContext() {
- HitConverter converter = new HitConverter(new MySearcher(), new Query());
+ HitConverter converter = new HitConverter(new MySearcher());
try {
converter.toSearchHit("69", new FS4Hit(1, createGlobalId(2), 3));
fail();
@@ -84,7 +85,7 @@ public class HitConverterTestCase {
@Test
void requireThatUnsupportedHitClassThrows() {
- HitConverter converter = new HitConverter(new MySearcher(), new Query());
+ HitConverter converter = new HitConverter(new MySearcher());
try {
converter.toSearchHit("69", new com.yahoo.searchlib.aggregation.Hit() {
@@ -95,21 +96,22 @@ public class HitConverterTestCase {
}
}
- private static GroupingListHit context() {
- return new GroupingListHit(Collections.emptyList(), null);
+ private static GroupingListHit context(Query query) {
+ return new GroupingListHit(List.of(), null, query);
}
- private static DocsumDefinitionSet sixtynine() {
+ private static DocumentDatabase sixtynine() {
var schema = new Schema.Builder("none");
var summary = new DocumentSummary.Builder("69");
schema.add(summary.build());
- return new DocsumDefinitionSet(schema.build());
+ return new DocumentDatabase(schema.build());
}
@Test
void requireThatVdsHitCanBeConverted() {
- HitConverter converter = new HitConverter(new MySearcher(), new Query());
- GroupingListHit context = new GroupingListHit(null, sixtynine());
+ Query query = new Query();
+ HitConverter converter = new HitConverter(new MySearcher());
+ GroupingListHit context = new GroupingListHit(null, sixtynine(), query);
VdsHit lowHit = new VdsHit("id:ns:type::", new byte[]{0x55, 0x55, 0x55, 0x55}, 1);
lowHit.setContext(context);
Hit hit = converter.toSearchHit("69", lowHit);