Package org.apache.lucene.misc.index

# Class IndexRearranger

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

public class IndexRearranger extends Object
Copy and rearrange index according to document selectors, from input dir to output dir. Length of documentSelectors determines how many segments there will be.

Rearranging works in 3 steps: 1. Assume all docs in the original index are live and create the rearranged index using the segment selectors. 2. Go through the rearranged index and apply deletes requested by the deletes selector. 3. Reorder the segments to match the order of the selectors and check the validity of the rearranged index.

NB: You can't produce segments that only contain deletes. If you select all documents in a segment for deletion, the entire segment will be discarded.

Example use case: You are testing search performance after a change to indexing. You can index the same content using the old and new indexers and then rearrange one of them to the shape of the other. Using rearrange will give more accurate measurements, since you will not be introducing noise from index geometry.

TODO: another possible (faster) approach to do this is to manipulate FlushPolicy and MergePolicy at indexing time to create small desired segments first and merge them accordingly for details please see: https://markmail.org/message/lbtdntclpnocmfuf

WARNING: This API is experimental and might change in incompatible ways in the next release.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static interface`
  `IndexRearranger.DocumentSelector`
  Select document within a CodecReader

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final IndexWriterConfig`
  `config`
  `protected final IndexRearranger.DocumentSelector`
  `deletedDocsSelector`
  `protected final Directory`
  `input`
  `protected final Directory`
  `output`
  `protected final List<IndexRearranger.DocumentSelector>`
  `segmentSelectors`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `IndexRearranger(Directory input, Directory output, IndexWriterConfig config, List<IndexRearranger.DocumentSelector> segmentSelectors)`
  Constructor with no deletes to apply
  `IndexRearranger(Directory input, Directory output, IndexWriterConfig config, List<IndexRearranger.DocumentSelector> segmentSelectors, IndexRearranger.DocumentSelector deletedDocsSelector)`
  All args constructor

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `execute()`

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

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

- ## Field Details

  - ### input

    protected final Directory input

  - ### output

    protected final Directory output

  - ### config

    protected final IndexWriterConfig config

  - ### segmentSelectors

    protected final List<IndexRearranger.DocumentSelector> segmentSelectors

  - ### deletedDocsSelector

    protected final IndexRearranger.DocumentSelector deletedDocsSelector

- ## Constructor Details

  - ### IndexRearranger

    public IndexRearranger(Directory input, Directory output, IndexWriterConfig config, List<IndexRearranger.DocumentSelector> segmentSelectors, IndexRearranger.DocumentSelector deletedDocsSelector)
    All args constructor
    Parameters:
      `input` - input dir
      `output` - output dir
      `config` - index writer config
      `segmentSelectors` - specify which documents are desired in the rearranged index segments; each selector corresponds to one segment
      `deletedDocsSelector` - specify which documents are to be marked for deletion in the rearranged index; this selector should be thread-safe

  - ### IndexRearranger

    public IndexRearranger(Directory input, Directory output, IndexWriterConfig config, List<IndexRearranger.DocumentSelector> segmentSelectors)
    Constructor with no deletes to apply

- ## Method Details

  - ### execute

    public void execute() throws Exception
    Throws:
      `Exception`