2016-05-02 5 views
0

kann ich Elasticsearch 2.3.0 Version mit C# (Nest) verwendenElasticsearch.net Index-Einstellungen + Analyzer

Ich möchte die Analyse mit dem Index verwenden,
aber Index-Einstellungen ändert sich nicht und ich weiß nicht weiß warum. Hier ist mein Code:

 private void button1_Click_1(object sender, EventArgs e) 
      { 
      var conn = new Uri("http://localhost:9200"); 
      var config = new ConnectionSettings(conn); 
      var client = new ElasticClient(config); 
      string server = cmb_Serv.Text.Trim(); 
     if (server.Length > 0) 
    { 
      string ser = server; 
      string uid = util.getConfigValue("SetUid"); 
      string pwd = util.getConfigValue("SetPwd"); 
      string dbn = cmb_Db.Text; 
      string tbl = cmb_Tbl.Text; 
      setWorkDbConnection(ser, uid, pwd, dbn); 

      string query = util.getConfigValue("SelectMC"); 
      query = query.Replace("###tbl###",tbl); 

      using (SqlCommand cmd1 = new SqlCommand()) 
      { 
       using (SqlConnection con1 = new SqlConnection()) 
       { 
        con1.ConnectionString = util.WorkConnectionString; 
        con1.Open(); 
        cmd1.CommandTimeout = 0; cmd1.Connection = con1; 
        cmd1.CommandText = query; 

        int id_num =0; 

        SqlDataReader reader = cmd1.ExecuteReader(); 
        while (reader.Read()) 
        { id_num++; 

        Console.Write("\r" + id_num); 

         var mc = new mc 
         { 
          Id = id_num, 
          code = reader[0].ToString(), 
          mainclass = reader[1].ToString().Trim() 
         }; 
         client.Index(mc, idx => idx.Index("mctest_ilhee")); 
        client.Alias(x => x.Add(a =>   a.Alias("mcAlias").Index("mctest_ilhee"))); 
         client.Map<mc>(d => d 
          .Properties(props => props 
          .String(s => s 
          .Name(p => p.mainclass) 
          .Name(p2 => p2.code).Index(FieldIndexOption.Analyzed).Analyzer("whitespace")))); 



        } reader.Dispose(); 
        reader.Close(); 

       } 
       IndexSettings Is = new IndexSettings(); 
       Is.Analysis.Analyzers.Add("snowball", new SnowballAnalyzer()); 
       Is.Analysis.Analyzers.Add("whitespace", new WhitespaceAnalyzer()); 
      } 
     } 
    } 

Antwort

1

Nun zunächst einmal Sie Code ist seltsam. Warum machst du in mapping? Führen Sie das Mapping nur einmal durch. Es ist unmöglich, Ihnen zu helfen, weil Sie nicht einmal Fehler liefern, die Sie bekommen. Ich würde empfehlen, eine einfache Debug-Methode hinzuzufügen.

protected void ValidateResponse(IResponse response) 
{ 
    if (!response.IsValid || 
    (response is IIndicesOperationResponse && !((IIndicesOperationResponse) response).Acknowledged)) 
    { 
     var error = string.Format("Request to ES failed with error: {0} ", response.ServerError != null ? response.ServerError.Error : "Unknown"); 
     var esRequest = string.Format("URL: {0}\n Method: {1}\n Request: {2}\n", 
        response.ConnectionStatus.RequestUrl, 
        response.ConnectionStatus.RequestMethod, 
        response.ConnectionStatus.Request != null 
         ? Encoding.UTF8.GetString(response.ConnectionStatus.Request) 
         : string.Empty); 
    } 
} 

Alle Anfragen wie client.Alias ​​, client.Map kehrt Status. So können Sie tun

var result = client.Map<mc>(.....YOUR_CODE_HERE....) 
ValidateResponse(result); 

Dann werden Sie zwei Dinge sehen, Propper Fehler, die ES Rückkehr + Anfrage, die NEST ES sendet