【问题标题】:Elasticsearch.net Index Settings + AnalyzerElasticsearch.net 索引设置 + 分析器
【发布时间】:2016-05-02 09:54:25
【问题描述】:

我可以使用带有 C# (Nest) 的 elasticsearch 2.3.0 版本

我想使用索引分析,
但索引设置没有改变,我不知道为什么。 这是我的代码:

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

【问题讨论】:

    标签: elasticsearch nest elasticsearch-net


    【解决方案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.Aliasclient.Map 等所有请求都会返回状态。所以你可以这样做

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

    然后你会看到两件事,ES返回的propper错误+NEST发送给ES的请求

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多