private boolean ensureIndexAsync() {
        if (!isIndexInitialised() && !isInitialising.get()) {
            synchronized (this) {
                if (!isIndexInitialised() && !isInitialising.get()) {
                    LOGGER.info("{} - Executing async initialisation of the content index", RE_INDEX_JOB_NAME);
                    CompletableFuture.runAsync(this::initIndex);
                }
            }
        }
        // If async this will almost certainly be true
        final boolean isInitialised = isIndexInitialised();
        if (!isInitialised && initialisationError != null) {
            throw new RuntimeException("Content index failed initialisation due to: "
                                       + initialisationError.getMessage());
        }
        return isInitialised;
    }
Creation of the content index (or re-indexing it) is triggered by a user doing a content
search. This ensures that only UI nodes create the index.
The index is also updated on a doc basis by this class handling {@link EntityEvent}s however
they will be ignored if the index is not initialised.
There is also a managed job that will trigger a full re-index
stroom-index/stroom-index-lucene980/src/main/java/stroom/contentindex/LuceneContentIndex.java