public Map<String, AnalyzerReference> initLazyAnalyzerReferences(
      IndexManagerHolder indexesFactory) {
    final Map<String, AnalyzerReference> initializedAnalyzers = new HashMap<>(analyzerDefs.size());

    for (LuceneAnalyzerReference lazyAnalyzerReference : lazyLuceneAnalyzerReferences) {
      initLazyLuceneAnalyzer(initializedAnalyzers, lazyAnalyzerReference);
    }

    for (RemoteAnalyzerReference remoteAnalyzerReference : lazyRemoteAnalyzerReferences) {
      initLazyRemoteAnalyzer(initializedAnalyzers, remoteAnalyzerReference, indexesFactory);
    }

    // init default remote analyzers
    initLazyRemoteAnalyzer(initializedAnalyzers, RemoteAnalyzerReference.DEFAULT, indexesFactory);
    initLazyRemoteAnalyzer(
        initializedAnalyzers, RemoteAnalyzerReference.PASS_THROUGH, indexesFactory);

    // initialize the remaining definitions
    for (Map.Entry<String, AnalyzerDef> entry : analyzerDefs.entrySet()) {
      if (!initializedAnalyzers.containsKey(entry.getKey())) {
        final Analyzer analyzer = buildAnalyzer(entry.getValue());
        final AnalyzerReference reference = new LuceneAnalyzerReference(analyzer);
        initializedAnalyzers.put(entry.getKey(), reference);
      }
    }
    return Collections.unmodifiableMap(initializedAnalyzers);
  }