Creating an index Nest

In case people have NEST 2.0, the .NumberOfReplicas(x).NumberOfShards(y) are in the Settings area now so specify within the lamba expression under Settings.

        EsClient.CreateIndex("indexname", c => c
        .Settings(s => s
             .NumberOfReplicas(replicasNr)
             .NumberOfShards(shardsNr)
        )

NEST 2.0 has a lot of changes and moved things around a bit so these answers are a great starting point for sure. You may need to adjust a little for the NEST 2.0 update.


Small example :

            EsClient.CreateIndex("indexname", c => c
                .NumberOfReplicas(replicasNr)
                .NumberOfShards(shardsNr)
            .Settings(s => s
                 .Add("merge.policy.merge_factor", "10")
                 .Add("search.slowlog.threshold.fetch.warn", "15s")
            )

            #region Analysis
           .Analysis(descriptor => descriptor
                .Analyzers(bases => bases
                    .Add("folded_word", new CustomAnalyzer()
                    {
                        Filter = new List<string> { "icu_folding", "trim" },
                        Tokenizer = "standard"
                    }
                    )

             .TokenFilters(i => i
                         .Add("engram", new EdgeNGramTokenFilter
                         {
                             MinGram = 1,
                             MaxGram = 20
                         }
                         )
            )
            .CharFilters(cf => cf
                         .Add("drop_chars", new PatternReplaceCharFilter
                         {
                             Pattern = @"[^0-9]",
                             Replacement = ""
                         }

            )
            #endregion

            #region Mapping Categories
            .AddMapping<Categories>(m => m
                .Properties(props => props
                    .MultiField(mf => mf
                            .Name(n => n.Label_en)
                            .Fields(fs => fs
                                .String(s => s.Name(t => t.Label_en).Analyzer("folded_word"))
                                )
                        )
             )
            #endregion
    );

Creating an index in older versions

There are two main ways that you can accomplish this as outlined in the Nest Create Index Documentation:

Here is the way where you directly declare the index settings as Fluent Dictionary entries. Just like you are doing in your example above. I tested this locally and it produces the index settings that match your JSON above.

        var response = client.CreateIndex(indexName, s => s
          .NumberOfReplicas(replicas)
          .NumberOfShards(shards)
          .Settings(settings => settings
             .Add("merge.policy.merge_factor", "10")
             .Add("search.slowlog.threshold.fetch.warn", "1s")
             .Add("mapping.allow_type_wrapper", true)
             .Add("analysis.filter.trigrams_filter.type", "nGram")
             .Add("analysis.filter.trigrams_filter.min_gram", "3")
             .Add("analysis.filter.trigrams_filter.max_gram", "3")
             .Add("analysis.analyzer.trigrams.type", "custom")
             .Add("analysis.analyzer.trigrams.tokenizer", "standard")
             .Add("analysis.analyzer.trigrams.filter.0", "lowercase")
             .Add("analysis.analyzer.trigrams.filter.1", "trigrams_filter")
           )
           .AddMapping<Object>(mapping => mapping
              .Type("data")
              .AllField(af => af.Enabled())
              .Properties(prop => prop
                 .String(sprop => sprop
                   .Name("text")
                   .IndexAnalyzer("trigrams")
                  )
               )
           )
       );

Please note that NEST also includes the ability to create index settings using strongly typed classes as well. I will post an example of that later, if I have time to work through it.

Creating index with NEST 7.x

Please also note that in NEST 7.x CreateIndex method is removed. Use Indices.Create isntead. Here's the example.

_client.Indices
    .Create(indexName, s => s
        .Settings(se => se
            .NumberOfReplicas(replicas)
            .NumberOfShards(shards)
            .Setting("merge.policy.merge_factor", "10")));