【问题标题】:Returning Raw Json in ElasticSearch NEST query在 ElasticSearch NEST 查询中返回原始 Json
【发布时间】:2020-09-02 18:24:12
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: elasticsearch servicestack json.net nest


    【解决方案1】:

    嗨,佩德罗,你可以用 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

    【讨论】:

    • 谢谢 有没有办法用自定义的序列化器替换 json.net 序列化器 impl? (比如说服务栈)
    • @Martijn 有没有办法在发送查询之前将其可视化?
    • result.Result 在当前 API 中似乎不存在。现在这是如何实现的?我想将 elasticsearch 服务器响应直接传递给我的客户端,因为客户端使用 javascript 库来处理标准 ES 响应以进行分面等。谢谢。
    • 我在 ConnectionStatus 和 SearchPost 上有错误。我是否缺少命名空间?
    • 在使用较新版本 (2.4) 的 ElasticClient 时,此代码似乎完全损坏。
    【解决方案2】:

    使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2017-03-07
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多