我目前正在从Elastic Search 1.7升级到5.2。我知道没有升级路径,这很好。我们最初遇到的一个问题是Nest和ElastiSearch.Net无法附加X509证书,因为它只能使用基本身份验证。为了解决这个问题,我们制作了现有github repos的副本并直接修改了代码以允许它。这最终使我们无法升级,因为我们不能只使用nuget包,因为我们现在有自定义代码。
现在我们正在升级,我试图找出这是否曾经得到纠正。或者,至少我们可以使用任何钩子来获取ElasticClient(在Nest中)或ElasticLowLevelClient(在ElasticSearch.Net中)以获取证书并在进行调用时传递它。
另一种选择是使用PUT请求在初始创建时创建索引,这是我们需要证书的地方。我们遇到的问题是我们需要使用AutoMap方法,因为我们在模型上添加了一些自定义属性,并且需要在创建索引时使用它们。我不确定是否有办法将给定模型的AutoMap结果生成为JSON,只需使用webclient附加证书即可。
如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:0)
可以自定义NEST和Elasticsearch.Net一直使用的连接回到1.x.这是通过向传递给IConnection
构造函数的ConnectionSettings
实例提供您自己的ElasticClient
实现来完成的。
首先创建自定义IConnection
;从HttpConnection
public class HttpConnectionWithClientCertificate : HttpConnection
{
protected override HttpWebRequest CreateHttpWebRequest(RequestData requestData)
{
var request = base.CreateHttpWebRequest(requestData);
// add the certificate to the request
request.ClientCertificates.Add(new X509Certificate("path_to_cert"));
return request;
}
}
然后将其传递给ConnectionSettings
var node = new Uri("http://localhost:9200");
var connectionPool = new SingleNodeConnectionPool(node);
var connection = new HttpConnectionWithClientCertificate();
var settings = new ConnectionSettings(connectionPool, connection);
var client = new ElasticClient(config);