2017-02-02 13 views
0

"mynGram"と呼ばれるカスタムアナライザーを作成しました。しかし、nullのためAnalysisに追加することはできません。カスタムアナライザでインデックスを作成する正しい方法は何ですか?IndexSettings ElasticSearchネストの解析はnullです。カスタムアナライザを追加するには?

const string indexName = "taskmanager"; 
      ConnectionSettings settings = new ConnectionSettings(new Uri("http://localhost:9200")).DefaultIndex("taskmanager").DefaultTypeNameInferrer(t => "tasks"); 
      elasticClient = new ElasticClient(settings); 

      IndexSettings indexSettings = new IndexSettings(); 

      CustomAnalyzer customAnalyzer = new CustomAnalyzer(); 
      customAnalyzer.CharFilter = new List<string>(); 
      customAnalyzer.Tokenizer = "mynGram"; 
      customAnalyzer.Filter = new List<string> { "lowercase" }; 

      // test 
      // Analysis is null 
      indexSettings.Analysis = new Analysis(); 

      // Analyzers is null 
      indexSettings.Analysis.Analyzers.Add("mynGram", customAnalyzer); 
      indexSettings.Analysis.Tokenizers.Add("mynGram", new NGramTokenizer { MaxGram = 10, MinGram = 2 }); 

      IndexState indexConfig = new IndexState 
      { 
       Settings = indexSettings 
      }; 

      elasticClient.CreateIndex(indexName, i => i 
       .InitializeUsing(indexConfig) 
      ); 

このカスタムアナライザをAnalyzer属性に設定します。

あなたがそうであるように、それはNEST 2.xのになり、オブジェクト初期化子構文を使用した
[Text(Name = "Title", Index = false, Store = true, Analyzer = "mynGram")] 
     public string Title { get; set; } 
+0

NESTのどのバージョン? –

答えて

0

および5.x

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200")); 
var defaultIndex = "taskmanager"; 
var connectionSettings = new ConnectionSettings(pool) 
     .DefaultIndex(defaultIndex); 

var client = new ElasticClient(connectionSettings); 

var customAnalyzer = new CustomAnalyzer 
{ 
    Tokenizer = "mynGram", 
    Filter = new[] { "lowercase" } 
}; 

var createIndexRequest = new CreateIndexRequest(defaultIndex) 
{ 
    Settings = new IndexSettings 
    { 
     Analysis = new Analysis 
     { 
      Analyzers = new Analyzers{ { "mynGram", customAnalyzer } }, 
      Tokenizers = new Tokenizers{ { "mynGram", new NGramTokenizer { MaxGram = 10, MinGram = 2 } } } 
     } 
    } 
}; 

client.CreateIndex(createIndexRequest); 
関連する問題