This is an automated email from the ASF dual-hosted git repository.
cpoerschke pushed a commit to branch jira/solr-13350
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/jira/solr-13350 by this push:
new fdfef9f734d (partially) explore segment level FixedBitSet use
fdfef9f734d is described below
commit fdfef9f734d091db7298d3493681d7f07f50c043
Author: Christine Poerschke <[email protected]>
AuthorDate: Fri Apr 12 11:48:46 2024 +0100
(partially) explore segment level FixedBitSet use
---
.../apache/solr/search/MultiThreadedSearcher.java | 24 +++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git
a/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java
b/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java
index 290ec41520a..e56ef2c59e1 100644
--- a/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/MultiThreadedSearcher.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.concurrent.ExecutionException;
import java.util.function.Supplier;
import org.apache.lucene.index.LeafReaderContext;
@@ -186,22 +187,30 @@ public class MultiThreadedSearcher {
}
static class FixedBitSetCollector extends SimpleCollector {
- private final FixedBitSet bitSet;
+ private final LinkedList<FixedBitSet> bitSets = new LinkedList<>();
+ private final LinkedList<Integer> skipBits = new LinkedList<>();
+ private final int maxDoc;
private int docBase;
FixedBitSetCollector(int maxDoc) {
- this.bitSet = new FixedBitSet(maxDoc);
+ this.maxDoc = maxDoc;
}
@Override
protected void doSetNextReader(LeafReaderContext context) throws
IOException {
- this.docBase = context.docBase;
+ if (this.bitSets.isEmpty() || this.docBase != context.docBase) {
+ this.docBase = context.docBase;
+ final int skipWords = 0; // TODO: this.docBase / 64;
+ final int skipBits = skipWords * 64;
+ this.skipBits.add(skipBits);
+ this.bitSets.add(new FixedBitSet(this.maxDoc - skipBits));
+ }
}
@Override
public void collect(int doc) throws IOException {
- this.bitSet.set(this.docBase + doc);
+ this.bitSets.getLast().set(this.docBase + doc - this.skipBits.getLast());
}
@Override
@@ -210,7 +219,12 @@ public class MultiThreadedSearcher {
}
FixedBitSet bitSet() {
- return this.bitSet;
+ final FixedBitSet result = new FixedBitSet(this.maxDoc);
+ for (FixedBitSet bitSet : this.bitSets) {
+ // TODO: consider this.skipBits
+ result.or(bitSet);
+ }
+ return result;
}
}