如何从NEST Elasticsearch查询中"传递"原始json响应?

ric*_*ver 5 c# json elasticsearch servicestack nest

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

以前类似的问题现在已经过时了 - 在ElasticSearch NEST查询中返回Raw Json

谢谢

Duo*_*ran 5

这对于希望在撰写本文时在较新版本的NEST v2.3中实现相同功能的读者有所帮助。如果您只想要响应,则只需ElasticLowLevelClient根据doc使用,即可:

var responseJson = client.Search<string>(...);
Run Code Online (Sandbox Code Playgroud)

但是,如果您还希望输入结果,那么它会涉及到更多。你需要调用DisableDirectStreaming()的设置对象,然后检索来自原始JSON response.ApiCall.ResponseBodyInBytes作为展示在这里

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);
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*man 4

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

var search = client.Search<Stream>(new { size = 10 });
Run Code Online (Sandbox Code Playgroud)

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

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