9

我正在对 .net 中的弹性搜索客户端进行一项小型研究,发现 NEST 是解决此问题的最受支持的解决方案之一。

我正在查看 Nest 的文档,但我找不到从查询中输出原始 json 并避免序列化为对象的方法,因为我在前端使用 angularJs 我不想重载通过一些不必要的步骤将信息发送给客户。

......而且我也想知道如何覆盖序列化过程?

我发现 NEST 使用 Json.NET,我想为 servicestack json serielizer 更改它。

谢谢!

4

2 回答 2

12

嗨佩德罗,你可以用 NEST 做到这一点

var searchDescriptor = new SearchDescriptor<ElasticSearchProject>()
    .Query(q=>q.MatchAll());
var request = this._client.Serializer.Serialize(searchDescriptor);
ConnectionStatus result = this._client.Raw.SearchPost(request);
Assert.NotNull(result);
Assert.True(result.Success);
Assert.IsNotEmpty(result.Result);

这允许您强烈键入查询,但将.Result作为来自 elasticsearch 的原始响应的字符串作为字符串返回给您的

request可以是对象或字符串,因此如果您对内部 json 序列化没问题,只需直接传递 searchDescriptor

于 2013-12-24T21:35:11.090 回答
0

使用 RequestResponseSerializer 而不是 Serializer。

var searchDescriptor = ...;
...
byte[] b = new byte[60000];
using (MemoryStream ms = new MemoryStream(b))
{
    this._client.RequestResponseSerializer.Serialize(searchDescriptor , ms);
}
var rawJson = System.Text.Encoding.Default.GetString(b);
于 2019-06-04T10:42:18.757 回答