diff options
Diffstat (limited to 'container-search/src/main')
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); } |