我正在对.net中的弹性搜索客户进行一项小型研究,我发现NEST是此问题最受支持的解决方案之一。
我正在查看Nest的文档,我找不到从查询中输出原始json并避免序列化为对象的方法,因为我在前端使用angularJs我不想超载通过一些不必要的步骤将信息发送给客户的过程。
......而且我想知道我怎样才能超越序列化过程?
我发现NEST使用Json.NET,我想为servicestack json serielizer更改。
谢谢!
答案 0 :(得分:9)
您好佩德罗你可以用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
(即弹性搜索的原始响应作为字符串返回到
request
可以是一个对象或字符串,所以如果你对内部json序列化没问题,只需直接传递searchDescriptor
答案 1 :(得分: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);