From 14372e0ef0b48427d38d3a874e5e9c464e8b8188 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Sun, 24 Sep 2023 19:35:15 +0200 Subject: [PATCH] (index) Slightly reduce alloc churn --- .../index/client/model/results/SearchResultItem.java | 4 ++-- .../marginalia/index/results/IndexMetadataService.java | 9 ++------- .../nu/marginalia/index/results/IndexResultValuator.java | 3 ++- .../index/results/IndexResultDomainDeduplicatorTest.java | 2 +- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultItem.java b/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultItem.java index 19f879ca..7393e3b4 100644 --- a/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultItem.java +++ b/code/api/index-api/src/main/java/nu/marginalia/index/client/model/results/SearchResultItem.java @@ -21,9 +21,9 @@ public class SearchResultItem implements Comparable { /** How many other potential results existed in the same domain */ public int resultsFromDomain; - public SearchResultItem(long combinedId) { + public SearchResultItem(long combinedId, int scoresCount) { this.combinedId = combinedId; - this.keywordScores = new ArrayList<>(16); + this.keywordScores = new ArrayList<>(scoresCount); } diff --git a/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexMetadataService.java b/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexMetadataService.java index 1ff444ad..39a47888 100644 --- a/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexMetadataService.java +++ b/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexMetadataService.java @@ -115,14 +115,8 @@ public class IndexMetadataService { termdocToMeta = new Long2ObjectArrayMap<>(termIdsList.length); for (long termId : termIdsList) { - var mapForTerm = new Long2LongOpenHashMap(docIdsAll.length); - var metadata = index.getTermMetadata(termId, docIdsAll); - for (int i = 0; i < docIdsAll.length; i++) { - mapForTerm.put(docIdsAll[i], metadata[i]); - } - - termdocToMeta.put(termId, mapForTerm); + termdocToMeta.put(termId, new Long2LongOpenHashMap(docIdsAll, metadata)); } } @@ -138,6 +132,7 @@ public class IndexMetadataService { for (var coherenceSet : coherences.words()) { long overlap = 0xFF_FFFF_FFFF_FFFFL; + for (var word : coherenceSet) { long positions = WordMetadata.decodePositions(getTermMetadata(word, docId)); overlap &= positions; diff --git a/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexResultValuator.java b/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexResultValuator.java index 05f94779..6df2755d 100644 --- a/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexResultValuator.java +++ b/code/services-core/index-service/src/main/java/nu/marginalia/index/results/IndexResultValuator.java @@ -70,7 +70,8 @@ public class IndexResultValuator { boolean anyAllSynthetic = false; int maxPositionsSet = 0; - SearchResultItem searchResult = new SearchResultItem(id); + SearchResultItem searchResult = new SearchResultItem(id, + searchTermVariants.stream().mapToInt(List::size).sum()); for (int querySetId = 0; querySetId < searchTermVariants.size(); diff --git a/code/services-core/index-service/src/test/java/nu/marginalia/index/results/IndexResultDomainDeduplicatorTest.java b/code/services-core/index-service/src/test/java/nu/marginalia/index/results/IndexResultDomainDeduplicatorTest.java index a2960a67..891a5ff0 100644 --- a/code/services-core/index-service/src/test/java/nu/marginalia/index/results/IndexResultDomainDeduplicatorTest.java +++ b/code/services-core/index-service/src/test/java/nu/marginalia/index/results/IndexResultDomainDeduplicatorTest.java @@ -29,7 +29,7 @@ class IndexResultDomainDeduplicatorTest { } SearchResultItem forId(int domain, int ordinal) { - return new SearchResultItem(UrlIdCodec.encodeId(domain, ordinal)); + return new SearchResultItem(UrlIdCodec.encodeId(domain, ordinal), 4); } } \ No newline at end of file