You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2020/07/09 17:08:13 UTC
[lucene-solr] branch jira/SOLR-14608-export updated: SOLR-14608:
Add basic top level merge sort iterator
This is an automated email from the ASF dual-hosted git repository.
jbernste pushed a commit to branch jira/SOLR-14608-export
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/jira/SOLR-14608-export by this push:
new bb4ae51 SOLR-14608: Add basic top level merge sort iterator
bb4ae51 is described below
commit bb4ae51c1c3e54c976bd1d449d5264afa3d74ec2
Author: Joel Bernstein <jb...@apache.org>
AuthorDate: Thu Jul 9 13:04:39 2020 -0400
SOLR-14608: Add basic top level merge sort iterator
---
.../apache/solr/handler/export/ExportWriter.java | 52 ++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java b/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
index 8d07239..66515c0 100644
--- a/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
+++ b/solr/core/src/java/org/apache/solr/handler/export/ExportWriter.java
@@ -25,6 +25,7 @@ import java.io.PrintWriter;
import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
import java.util.List;
+import java.util.TreeSet;
import com.codahale.metrics.Timer;
import org.apache.lucene.index.LeafReader;
@@ -612,6 +613,57 @@ public class ExportWriter implements SolrCore.RawWriter, Closeable {
return new SortDoc(sortValues);
}
+
+
+ private static class MergeIterator {
+
+ private TreeSet<SortDoc> set = new TreeSet();
+ private SegmentIterator[] segmentIterators;
+
+ public MergeIterator(SegmentIterator[] segmentIterators) {
+ this.segmentIterators = segmentIterators;
+ for(int i=0; i<segmentIterators.length; i++) {
+ SortDoc sortDoc = segmentIterators[i].next();
+ if(sortDoc != null) {
+ set.add(sortDoc);
+ }
+ }
+ }
+
+ /*
+ * Merge sorts the SortDocs from Segment Iterators
+ * Returns null when all docs are iterated.
+ */
+
+ public SortDoc next() {
+ //This method is free
+ SortDoc sortDoc = set.pollFirst();
+ SortDoc nextDoc = segmentIterators[sortDoc.ord].next();
+ if(nextDoc != null) {
+ //The entire expense of the operation is here
+ set.add(nextDoc);
+ }
+ return sortDoc;
+ }
+ }
+
+ private static class SegmentIterator {
+
+ private FixedBitSet bits;
+ private LeafReaderContext context;
+ private SortQueue sortQueue;
+
+ public SegmentIterator(FixedBitSet bits, LeafReaderContext context, SortQueue sortQueue) {
+ this.bits = bits;
+ this.context = context;
+ this.sortQueue = sortQueue;
+ }
+
+ public SortDoc next() {
+ return null;
+ }
+ }
+
public static class IgnoreException extends IOException {
public void printStackTrace(PrintWriter pw) {
pw.print("Early Client Disconnect");