code: func (w *IndexWriter) forceMerge(maxNumSegments int) error {
  	return w.forceMergeAndWait(maxNumSegments, true)
  }
docs: /*
  Forces merge policy to merge segments until there are <=
  maxNumSegments. The actual merge to be executed are determined by the
  MergePolicy.
  
  This is a horribly costly operation, especially when you pass a small
  maxNumSegments; usually you should only call this if the index is
  static (will no longer be changed).
  
  Note that this requires up to 2X the index size free space in your
  Directory (3X if you're using compound file format). For example, if
  your index size is 10 MB, then you need up to 20 MB free for this to
  complete (30 MB if you're using compound file format). Also, it's
  best to call commit() afterwards, to allow IndexWriter to free up
  disk space.
  
  If some but not all readers re-open while merging is underway, this
  will cause > 2X temporary space to be consumed as those new readers
  will then hold open the temporary segments at that time. it is best
  not to re-open readers while merging is running.
  
  The actual temporary usage could be much less than these figures (it
  depends on many factors).
  
  In general, once this completes, the total size of the index will be
  less than the size of the starting index. It could be quite a bit
  smaller (if there were many pending deletes) or just slightly smaller.
  
  If an error is hit, for example, due to disk full, the index will not
  be corrupted and no documents will be list. However, it may have been
  partially merged (some segments were merged but not all), and it's
  possible that one of the segments in the index will be in
  non-compound format even when using compound file format. This will
  occur when the error is hit during conversion of the segment into
  compound format.
  
  This call will merge those segments present in the index when call
  started. If other routines are still adding documents and flushing
  segments, those newly created segments will not be merged unless you
  call forceMerge again.
  
  NOTE: if you call CloseAndWait() with false, which aborts all running
  merges, then any routine still running this method might hit a
  MergeAbortedError.
  */