(index) Experimental performance regression fix

This commit is contained in:
Viktor Lofgren 2024-04-16 19:43:14 +02:00
parent 1bb88968c5
commit c620e9c026

View File

@ -2,8 +2,7 @@ package nu.marginalia.index.index;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import it.unimi.dsi.fastutil.longs.*;
import it.unimi.dsi.fastutil.longs.LongSet;
import nu.marginalia.api.searchquery.model.compiled.aggregate.CompiledQueryAggregates; import nu.marginalia.api.searchquery.model.compiled.aggregate.CompiledQueryAggregates;
import nu.marginalia.index.query.filter.QueryFilterAllOf; import nu.marginalia.index.query.filter.QueryFilterAllOf;
import nu.marginalia.index.query.filter.QueryFilterAnyOf; import nu.marginalia.index.query.filter.QueryFilterAnyOf;
@ -125,28 +124,26 @@ public class StatefulIndex {
// the term is missing from the index and can never be found // the term is missing from the index and can never be found
paths.removeIf(containsAll(termPriority).negate()); paths.removeIf(containsAll(termPriority).negate());
List<QueryBranchWalker> walkers = QueryBranchWalker.create(termPriority, paths); for (var path : paths) {
LongList elements = new LongArrayList(path);
for (var walker : walkers) { elements.sort((a, b) -> {
for (var builder : List.of( for (int i = 0; i < termPriority.length; i++) {
combinedIndexReader.findPriorityWord(walker.termId), if (termPriority[i] == a)
combinedIndexReader.findFullWord(walker.termId) return -1;
)) if (termPriority[i] == b)
{ return 1;
queryHeads.add(builder);
if (walker.atEnd())
continue; // Single term search query
// Add filter steps for the remaining combinations of terms
List<QueryFilterStepIf> filterSteps = new ArrayList<>();
for (var step : walker.next()) {
filterSteps.add(createFilter(step, 0));
}
builder.addInclusionFilterAny(filterSteps);
} }
return 0;
});
var head = combinedIndexReader.findFullWord(elements.getLong(0));
for (int i = 1; i < elements.size(); i++) {
head.addInclusionFilter(combinedIndexReader.hasWordFull(elements.getLong(i)));
} }
queryHeads.add(head);
}
// Add additional conditions to the query heads // Add additional conditions to the query heads
for (var query : queryHeads) { for (var query : queryHeads) {