我正在对 .net 中的弹性搜索客户端进行一项小型研究,发现 NEST 是解决此问题的最受支持的解决方案之一。
我正在查看 Nest 的文档,但我找不到从查询中输出原始 json 并避免序列化为对象的方法,因为我在前端使用 angularJs 我不想重载通过一些不必要的步骤将信息发送给客户。
......而且我也想知道如何覆盖序列化过程?
我发现 NEST 使用 Json.NET,我想为 servicestack json serielizer 更改它。
谢谢!
我正在对 .net 中的弹性搜索客户端进行一项小型研究,发现 NEST 是解决此问题的最受支持的解决方案之一。
我正在查看 Nest 的文档,但我找不到从查询中输出原始 json 并避免序列化为对象的方法,因为我在前端使用 angularJs 我不想重载通过一些不必要的步骤将信息发送给客户。
......而且我也想知道如何覆盖序列化过程?
我发现 NEST 使用 Json.NET,我想为 servicestack json serielizer 更改它。
谢谢!
嗨佩德罗,你可以用 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
使用 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);