Настройки индекса Elasticsearch.net + анализатор

я могу использовать версию elasticsearch 2.3.0 с C # (Nest)

я хочу использовать анализ с индексом,
но настройки индекса не меняются, и я не знаю, почему. Вот мой код:

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

person lilly    schedule 02.05.2016    source источник


Ответы (1)


Ну, во-первых, ваш код странный. Почему вы делаете сопоставление в то время? Делайте отображение только один раз. Невозможно помочь вам, потому что вы даже не указываете ошибку, которую получаете. Я бы рекомендовал добавить простой метод отладки.

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

Все запросы, такие как client.Alias, client.Map, возвращают статус. Так что вы можете сделать

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

Затем вы увидите две вещи: правильную ошибку, которую возвращает ES + запрос, который NEST отправляет в ES.

person Vova Bilyachat    schedule 03.05.2016