When a data frame analytics job is started it will automatically create its destination index if it doesn't already exist.

When this happens the mappings are copied from the source indices.  In addition two settings are copied from the source indices: `index.number_of_shards` and `index.number_of_replicas`.

However, for certain mappings in can be necessary that more settings are copied from the source indices.  For example, `index.analysis`, `index.similarity` and `index.mapping` might be needed to make the destination index search results look like those of the source indices.  In the case of custom analyzers defined in the index settings the destination index definition might not even be valid without the `index.analysis` setting that defines the custom analyzers.

So, we need to copy `index.analysis`, `index.similarity` and `index.mapping` from the source settings to destination settings.  Some thought is still required as this could be complex in the case of multiple source indices with different settings.  It might be possible to do a simple merge like we do for mappings.
x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/dataframe/DestinationIndex.java
private static final String PROPERTIES = "properties";
    private static final String META = "_meta";
    private static final String RUNTIME = "runtime";
    private static final String DFA_CREATOR = "data-frame-analytics";
    /**
     * We only preserve the most important settings.
     * If the user needs other settings on the destination index they
     * should create the destination index before starting the analytics.
     */
    private static final String[] PRESERVED_SETTINGS = new String[] { "index.number_of_shards", "index.number_of_replicas" };
    /**
     * This is the minimum compatible version of the destination index we can currently work with.
     * If the results mappings change in a way existing destination indices will fail to index
     * the results, this should be bumped accordingly.
     */
    public static final Version MIN_COMPATIBLE_VERSION =
        StartDataFrameAnalyticsAction.TaskParams.VERSION_DESTINATION_INDEX_MAPPINGS_CHANGED;
    private DestinationIndex() {}
    /**
     * Creates destination index based on source index metadata.
     */
    public static void createDestinationIndex(
        Client client,
        Clock clock,
        DataFrameAnalyticsConfig analyticsConfig,
        ActionListener<CreateIndexResponse> listener
    ) {
        ActionListener<CreateIndexRequest> createIndexRequestListener = ActionListener.wrap(
            createIndexRequest -> ClientHelper.executeWithHeadersAsync(
                analyticsConfig.getHeaders(),