Creating an index Nest
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")));
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 );