Creating an index Nest
elasticsearch, elasticsearch-analyzers, elasticsearch-mapping, indexing, nest
Solution
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")));
Problem
How would I recreate the following index using Elasticsearch Nest API? Here is the json for the index including the mapping: ``` { "settings": { "analysis": { "filter": { "trigrams_filter": { "type": "ngram", "min_gram": 3, "max_gram": 3 } }, "analyzer": { "trigrams": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "trigrams_filter" ] } } } }, "mappings": { "data": { "_all" : {"enabled" : true}, "properties": { "text": { "type": "string", "analyzer": "trigrams" } } } } } ``` Here is my attempt: ``` var newIndex = client.CreateIndexAsync(indexName, index => index .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)) .AddMapping<Object>(mapping => mapping .IndexAnalyzer("trigram") .Type("string")) ); ``` The documentation does not mention anything about this? UPDATE: Found this post that uses `var index = new IndexSettings()` and then adds Analysis with the string literal json. `index.Add("analysis", @"{json});` Where can one find more examples like this one and does this work?