summaryrefslogtreecommitdiffstats
path: root/container-search/src/main
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/main
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/main')
-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
9 files changed, 42 insertions, 53 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);
}