从 Nest 客户端弹性搜索 2.3 序列化查询

serialize query from Nest client elastic search 2.3

自从将我的 Nest 客户端升级到 2.2.1 后,我无法看到我提交给我的弹性搜索客户端(现在是 2.3.0 版)的查询。 我曾经使用这一行:

string searchJson = Encoding.UTF8.GetString(client.Serializer.Serialize(myQueryHere));  

但是这个方法现在 returns 无效,而不是以前的 JSON。 ConnectionStatus 也不存在,所以我无法再看到我正在发送的 json,有人知道办法吗? CallDetails.RequestBodyInBytes 可用,但 returns 无效。

Take a look at the documentation for NEST 2.x on ConnectingCallDetails.RequestBodyInBytes 将是 null 除非你在传递给 ElasticClient

的构造函数的 ConnectionSettings 上设置 .DisableDirectStreaming()
var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));  
var settings = new ConnectionSettings(connectionPool) 
    .DisableDirectStreaming();

var client = new ElasticClient(settings);

现在请求和响应字节的副本将在响应 CallDetails 上公开

var response = client.Search<Document>();

var requestJson = Encoding.UTF8.GetString(response.CallDetails.RequestBodyInBytes);
var responseJson = Encoding.UTF8.GetString(response.CallDetails.ResponseBodyInBytes);

Whilst developing it may be useful to log out all requests and responses.

序列化方法现在需要流,它将在其上写入原始 json 查询 - 正常工作对于 Nest 5.3.0:

        var stream = new System.IO.MemoryStream();
        nestClient.Serializer.Serialize(query, stream);
        var jsonQuery = System.Text.Encoding.UTF8.GetString(stream.ToArray());