Lucene's index is segmented, and sometimes number of segments and documents arrangement greatly impact performance.
Given a stable index sort, our team create a tool that records document arrangement (called index map) of an index and rearrange another index (consists of same documents) into the same structure (segment num, and documents included in each segment).
This tool could be also used in lucene benchmarks for a faster deterministic index construction (if I understand correctly lucene benchmark is using a single thread manner to achieve this).
We've already had some discussion in email
And I've implemented the first method, using IndexWriter.addIndexes and a customized FilteredCodecReader to achieve the goal. The index construction time is about 25min and time executing this tool is about 10min.