繁体   English   中英

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

[英]How can I “pass through” the raw json response from a NEST Elasticsearch query?

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

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

谢谢

这是为了想要在更新版本的NEST,v2.3中实现相同目标的读者的利益。 如果您只想要响应,那么您需要做的就是使用ElasticLowLevelClient ,根据文档

var responseJson = client.Search<string>(...);

但是如果你想要输入类型的结果那么它就会更加复杂。 你需要调用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);
}

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM