我怎样才能通过"来自NEST Elasticsearch查询的原始json响应?

时间:2014-11-05 09:12:53

标签: c# json elasticsearch servicestack nest

我们的客户端代码直接与elasticsearch响应一起工作,但我想把NEST放在中间做一些安全和过滤。使用NEST(或elasticsearch.net)构建查询的最简单方法是什么,然后以最少的处理量将原始json响应传递回我的客户端。顺便说一句,我也在使用ServiceStack。

以前类似的问题现在已经过时了 - Returning Raw Json in ElasticSearch NEST query

由于

2 个答案:

答案 0 :(得分:5)

这是为了读者想要在更新版本的NEST,v2.3中实现相同的目标。如果您只是想要回复,根据doc

,您只需使用ElasticLowLevelClient即可。
var responseJson = client.Search<string>(...);

但是如果你想要输入类型的结果那么它会更加复杂。您需要在设置对象上调用DisableDirectStreaming(),然后从response.ApiCall.ResponseBodyInBytes检索原始json,如演示here

var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
    .DefaultIndex("index1")
    .DisableDirectStreaming();

var response = new ElasticClient(settings)
           .Search<object>(s => s.AllIndices().AllTypes().MatchAll());

if (response.ApiCall.ResponseBodyInBytes != null)
{
    var responseJson = System.Text.Encoding.UTF8.GetString(response.ApiCall.ResponseBodyInBytes);
}

答案 1 :(得分:3)

Elasticsearch.Net允许您直接返回响应流,

var search = client.Search<Stream>(new { size = 10 });

.Search()有许多重载来限制索引和类型的范围。

这将返回IElasticsearchResponse<Stream>,您可以将响应流直接传递给您的选择器的反序列化器(在您的情况下为SS.Text),而不会在其间进行客户端缓冲。