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");