mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-24 05:18:58 +00:00
(index) Experimental performance regression fix
This commit is contained in:
parent
41fa154aa6
commit
3359f72239
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user