如何使用Elasticsearch Nest API重新创建以下索引?
这是包含映射的索引的json:
{ "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" } } } } }
这是我的尝试:
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")) );
该文档没有提及任何内容?
更新:
找到了使用此帖子 var index = new IndexSettings()
var index = new IndexSettings()
然后添加带有字符串文字json的Analysis。
index.Add("analysis", @"{json});
在哪里可以找到更多类似的例子,这行得通吗?
您可以通过两种主要方法来完成此操作,如Nest Create Index文档中所述:
这是直接将索引设置声明为Fluent Dictionary条目的方法。就像您在上面的示例中所做的一样。我在本地进行了测试,它会生成与您的JSON匹配的索引设置。
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") ) ) ) );
请注意,NEST还包括使用强类型类创建索引设置的功能。如果我有时间进行研究,我将在稍后发布一个示例。
另请注意,在NEST 7.x中CreateIndex已删除方法。使用Indices.Createnottead。这是例子。
CreateIndex
Indices.Create
_client.Indices .Create(indexName, s => s .Settings(se => se .NumberOfReplicas(replicas) .NumberOfShards(shards) .Setting("merge.policy.merge_factor", "10")));