diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-09-10 20:18:04 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-09-10 20:18:04 +0200 |
commit | be2d00845e704a77c66d9ce4443a7e18812a8b38 (patch) | |
tree | 90143136336991cd7cf133ce15dcf65f4a22ea0d | |
parent | 9b16a5917acf4fabc9c4f4ebbb30974262ccbc74 (diff) |
Make fasthit leaner since it appears in considerable amounts during merging, and only a few are filled.
3 files changed, 32 insertions, 20 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java index da3c52969ca..1ade10f4f1f 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java @@ -63,7 +63,7 @@ public class FastHit extends Hit { * that most fields passes through the container with no processing most * of the time. */ - private List<SummaryData> summaries = new ArrayList<>(1); + private List<SummaryData> summaries = Collections.emptyList(); /** Removed field values, which should therefore not be returned if present in summary data */ private Set<String> removedFields = null; @@ -73,13 +73,20 @@ public class FastHit extends Hit { */ public FastHit() { } + public FastHit(GlobalId gid, Relevance relevance, int partId, int distributionKey) { + super(relevance); + this.globalId = gid; + this.partId = partId; + this.distributionKey = distributionKey; + } + // Note: This constructor is only used for tests, production use is always of the empty constructor public FastHit(String uri, double relevancy) { this(uri, relevancy, null); } // Note: This constructor is only used for tests, production use is always of the empty constructor - public FastHit(String uri, double relevance, String source) { + private FastHit(String uri, double relevance, String source) { setId(uri); setRelevance(new Relevance(relevance)); setSource(source); @@ -167,11 +174,11 @@ public class FastHit extends Hit { return (cmpRes != 0) ? cmpRes : super.compareTo(other); } - public boolean hasSortData(Sorting sorting) { + boolean hasSortData(Sorting sorting) { return sortData != null && sortDataSorting != null && sortDataSorting.equals(sorting); } - public static int compareSortData(FastHit left, FastHit right, Sorting sorting) { + static int compareSortData(FastHit left, FastHit right, Sorting sorting) { if (!left.hasSortData(sorting) || !right.hasSortData(sorting)) { return 0; // cannot sort } @@ -185,14 +192,14 @@ public class FastHit extends Hit { } int vl = (int) left.sortData[i] & 0xFF; int vr = (int) right.sortData[i] & 0xFF; - int diff = vl - vr; - return diff; + return vl - vr; } /** For internal use */ public void addSummary(DocsumDefinition docsumDef, Inspector value) { if (removedFields != null) removedFields.removeAll(docsumDef.fieldNames()); + if ( ! (summaries instanceof ArrayList) ) summaries = new ArrayList<>(8); summaries.add(0, new SummaryData(this, docsumDef, value, 1 + summaries.size())); } @@ -392,7 +399,7 @@ public class FastHit extends Hit { /** The computed set of fields. Lazily created as it is not always needed. */ private Set<String> fieldSet = null; - public FieldSet(FastHit hit) { + FieldSet(FastHit hit) { this.hit = hit; } @@ -629,7 +636,7 @@ public class FastHit extends Hit { protected abstract VALUE toValue(Map.Entry<String, Inspector> field); - protected void advanceNext() { + void advanceNext() { while (fieldIterator.hasNext()) { Map.Entry<String, Inspector> nextEntry = fieldIterator.next(); String fieldName = nextEntry.getKey(); @@ -667,7 +674,7 @@ public class FastHit extends Hit { private final String key; private final Object value; - public SummaryFieldEntry(String key, Object value) { + SummaryFieldEntry(String key, Object value) { this.key = key; this.value = value; } @@ -716,7 +723,7 @@ public class FastHit extends Hit { private Iterator<VALUE> currentIterator; private VALUE previousReturned = null; - public SummaryIterator(FastHit hit, Iterator<VALUE> mapFieldsIterator) { + SummaryIterator(FastHit hit, Iterator<VALUE> mapFieldsIterator) { this.hit = hit; this.currentIterator = mapFieldsIterator; } @@ -763,7 +770,7 @@ public class FastHit extends Hit { /** Iterator over all the field content of a FastHit */ private static class FieldIterator extends SummaryIterator<Map.Entry<String, Object>> { - public FieldIterator(FastHit hit, Iterator<Map.Entry<String, Object>> mapFieldsIterator) { + FieldIterator(FastHit hit, Iterator<Map.Entry<String, Object>> mapFieldsIterator) { super(hit, mapFieldsIterator); } @@ -782,7 +789,7 @@ public class FastHit extends Hit { /** Iterator over all the field names stored in a FastHit */ private static class FieldNameIterator extends SummaryIterator<String> { - public FieldNameIterator(FastHit hit, Iterator<String> mapFieldNamesIterator) { + FieldNameIterator(FastHit hit, Iterator<String> mapFieldNamesIterator) { super(hit, mapFieldNamesIterator); } 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 080e358d083..74de675684c 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 @@ -222,18 +222,14 @@ public class ProtobufSerialization { var sorting = query.getRanking().getSorting(); for (var replyHit : protobuf.getHitsList()) { - FastHit hit = new FastHit(); + FastHit hit = new FastHit(new GlobalId(replyHit.getGlobalId().toByteArray()), new Relevance(replyHit.getRelevance()), partId, distKey); hit.setQuery(query); - hit.setRelevance(new Relevance(replyHit.getRelevance())); - hit.setGlobalId(new GlobalId(replyHit.getGlobalId().toByteArray())); if (!replyHit.getSortData().isEmpty()) { hit.setSortData(replyHit.getSortData().toByteArray(), sorting); } hit.setFillable(); hit.setCached(false); - hit.setPartId(partId); - hit.setDistributionKey(distKey); hit.setSource(source); result.hits().add(hit); diff --git a/container-search/src/main/java/com/yahoo/search/result/Hit.java b/container-search/src/main/java/com/yahoo/search/result/Hit.java index 10fa7d24d1a..4a2d6c58423 100644 --- a/container-search/src/main/java/com/yahoo/search/result/Hit.java +++ b/container-search/src/main/java/com/yahoo/search/result/Hit.java @@ -61,7 +61,7 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi private URI id; /** The types of this hit */ - private Set<String> types = new ArraySet<>(1); + private Set<String> types = null; /** The relevance of this hit */ private Relevance relevance; @@ -107,6 +107,9 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi /** Creates an (invalid) empty hit. Id and relevance must be set before handoff */ protected Hit() {} + protected Hit(Relevance relevance) { + this.relevance = relevance; + } /** * Creates a minimal valid hit having relevance 1000 @@ -510,7 +513,12 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi } /** Returns the types of this as a modifiable set. Modifications to this set are directly reflected in this hit */ - public Set<String> types() { return types; } + //TODO This shoudld not be exposed as a modifiable set + public Set<String> types() { + if (types == null) + types = new ArraySet<>(1); + return types; + } /** * Returns the add number, assigned when adding the hit to a Result. @@ -655,7 +663,8 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi hit.fields = fields != null ? new LinkedHashMap<>(fields) : null; hit.unmodifiableFieldMap = null; - hit.types = new LinkedHashSet<>(types); + if (types != null) + hit.types = new LinkedHashSet<>(types); if (filled != null) { hit.setFilledInternal(new HashSet<>(filled)); } |