2014-04-29 66 views
0

我已通過ElasticSearch Sense瀏覽器插件創建了以下索引,並且還創建了C#Nest Fluent Mapping。我可以在Nest中表示除nGrams過濾器上的「token_chars」之外的所有內容。我沒有在C#套件上獲得強類型屬性來添加「token_chars」。有人遇到同樣的問題嗎?C#Nest ElasticSearch無法將「token_chars」映射到Nest fluentMapping

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#巢強類型屬性添加「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

介意爲此添加一個github問題? https://github.com/elasticsearch/elasticsearch-net/issues?direction=desc&sort=updated&state=open –

回答

3

我遇到了同樣的問題。解決方法是不使用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") 
    ); 

希望這會有所幫助。