No replica when full indexing
By disabling replica I found the indexing time could be cut more then half the total time. Replica could be added back after full indexing completes.
Make refresh time a bit longer
Refreshing index time using default value (1 second) put quite pressure to io, especially if you indexing quite big data and querying the cluster at the same time. Making the refresh time longer could relief that io bottleneck.