C#Nest ElasticSearch无法将“token_chars”映射到Nest fluentMapping

时间:2014-04-29 20:01:22

标签: elasticsearch nest

我通过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"
                 */
             }))));

1 个答案:

答案 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")
   );

希望这有帮助。