简体   繁体   中英

Elasticsearch.net Index Settings + Analyzer

i can use elasticsearch 2.3.0 version with C# (Nest)

i want to use the analysis with index,
but index settings doesn't change and i don't know why. Here's my 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());
          }
      }
    }

Well first of all you code is strange. Why you are doing mapping in while? Do mapping only once. Its impossible to help you because you are not even providing error you get. I would recomend to add simple debug method.

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);
    }
}

All requests such as client.Alias , client.Map returns status. So you can do

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

Then you will see two things, propper error which ES return + request which NEST sends to ES

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM