MultiPassIndexSplitter (Lucene 10.5.1 misc API)
Description: declaration: package: org.apache.lucene.misc.index, class: MultiPassIndexSplitter

Package org.apache.lucene.misc.index

# Class MultiPassIndexSplitter

java.lang.Object
org.apache.lucene.misc.index.MultiPassIndexSplitter

public class MultiPassIndexSplitter extends Object
This tool splits input index into multiple equal parts. The method employed here uses `IndexWriter.addIndexes(CodecReader[])` where the input data comes from the input index with artificially applied deletes to the document id-s that fall outside the selected partition.

Note 1: Deletes are only applied to a buffered list of deleted docs and don't affect the source index - this tool works also with read-only indexes.

Note 2: the disadvantage of this tool is that source index needs to be read as many times as there are parts to be created, hence the name of this tool.

NOTE: this tool is unaware of documents added atomically via `IndexWriter.addDocuments(java.lang.Iterable<? extends java.lang.Iterable<? extends org.apache.lucene.index.IndexableField>>)` or `IndexWriter.updateDocuments(org.apache.lucene.index.Term, org.apache.lucene.document.column.ColumnBatch)`, which means it can easily break up such document groups.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MultiPassIndexSplitter()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static void`
  `main(String[] args)`
  `void`
  `split(IndexReader in, Directory[] outputs, boolean seq)`
  Split source index into multiple parts.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### MultiPassIndexSplitter

    public MultiPassIndexSplitter()

- ## Method Details

  - ### split

    public void split(IndexReader in, Directory[] outputs, boolean seq) throws IOException
    Split source index into multiple parts.
    Parameters:
      `in` - source index, can have deletions, can have multiple segments (or multiple readers).
      `outputs` - list of directories where the output parts will be stored.
      `seq` - if true, then the source index will be split into equal increasing ranges of document id-s. If false, source document id-s will be assigned in a deterministic round-robin fashion to one of the output splits.
    Throws:
      `IOException` - If there is a low-level I/O error

  - ### main

    public static void main(String[] args) throws Exception
    Throws:
      `Exception`