如何使用 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"))
);
文档中没有提及任何相关内容?
更新:
找到 this使用的帖子
var index = new IndexSettings()
然后使用字符串文字 json 添加 Analysis。
index.Add("分析", @"{json});
在哪里可以找到更多像这样的例子,这行得通吗?
最佳答案
在旧版本中创建索引
如 Nest Create Index Documentation 中所述,您可以通过两种主要方式完成此操作:
这是您直接将索引设置声明为 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 创建索引
另请注意,在 NEST 7.x 中,CreateIndex
方法已被删除。使用 Indices.Create
是不合适的。这是示例。
_client.Indices
.Create(indexName, s => s
.Settings(se => se
.NumberOfReplicas(replicas)
.NumberOfShards(shards)
.Setting("merge.policy.merge_factor", "10")));
关于elasticsearch - 创建索引 Nest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23220874/