我通过ElasticSearch Sense浏览器插件创建了下面的索引,还创建了C#Nest Fluent Mapping。除了nGrams过滤器上的“token_chars”之外,我可以在Nest中表达所有内容。我没有在C#nest上获得强类型属性来添加“token_chars”。有人遇到过同样的问题吗?
json和c#设置如下所示。 请帮忙
"analysis": {
"analyzer": {
"str_index_analyzer": {
"filter": [
"lowercase",
"substring"
],
"tokenizer": "keyword"
},
"filter": {
"substring": {
"max_gram": "50",
"type": "nGram",
"min_gram": "2",
"token_chars": [ /*Not able to map */
"letter",
"digit"
]
}
}
我没有在C#nest上获得强类型属性来添加“token_chars”。有人遇到同样的问题吗?
var result = this._client.CreateIndex("mkfindex1", c => c
.Analysis(a => a.Analyzers(an => an.Add("str_index_analyzer", new CustomAnalyzer()
{
Filter = new string[] { "lowercase", "substring" },
Tokenizer = "keyword"
})).TokenFilters(bases => bases.Add("substring", new NgramTokenFilter()
{
MaxGram = 50,
MinGram = 2,
/*"token_chars": [//Not able to map
"letter",
"digit"
*/
}))));
答案 0 :(得分:4)
我遇到了同样的问题。解决方法是不使用Fluent Mapping,只需通过Settings.Add()
方法直接将分析设置指定为Fluent Dictionary条目。下面是一个应该正确配置索引的示例。
var result = this._client.CreateIndex("mkfindex1", c => c
.Settings.Add("analysis.analyzer", "str_index_analyzer")
.Settings.add("analysis.analyzer.str_index_analyzer.type", "custom")
.Settings.add("analysis.analyzer.str_index_analyzer.tokenizer", "keyword")
.Settings.Add("analysis.analyzer.str_index_analyzer.filter.0", "lowercase")
.Settings.Add("analysis.analyzer.str_index_analyzer.filter.1", "substring")
.Settings.add("analysis.filter.substring.type", "nGram")
.Settings.add("analysis.filter.substring.min_gram", "2")
.Settings.add("analysis.filter.substring.max_gram", "50")
.Settings.add("analysis.filter.substring.token_chars.0", "letter")
.Settings.add("analysis.filter.substring.token_chars.0", "digit")
);
希望这有帮助。