gpt4 book ai didi

elasticsearch - 使用 2.X NEST 客户端获取搜索响应的请求正文

转载 作者:行者123 更新时间:2023-12-03 00:41:20 24 4
gpt4 key购买 nike

我正在使用新的 2.X NEST 客户端。这部分很重要,因为有很多重大变化会影响这里的潜在答案。

以前,我使用 Glimpse Elasticsearch 插件来查看 NEST 生成的底层查询。但是,该插件似乎不再与 2.X NEST 兼容。因此,我试图找到一种解决方法来查看 JSON 查询。这里的问题是访问 response.RequestInformation 的旧方式获取请求正文已消失。好像换成了 ApiCall 的组合, CallDetails , 和 DebugInformation .这里的问题是,在所有这些请求字节数组都是空的,除非你添加 .DisableDirectStreaming()ConnectionSettings您传入 ElasticClient 的实例.问题是我使用依赖注入(inject)和 Ninject 来处理所有这些,所以在 Controller 操作中,我无法访问 ConnectionSettings例如做出这样的改变。我想我可以添加 .DisableDirectStreaming()全局范围内,但我不知道这样做的潜在后果是什么,而且这方面的文档非常稀少。

所以,这里有一些答案的途径,我会接受其中的任何一个。首先,如果有人设法让 Glimpse 插件在 2.X 中运行,我很想知道你做了什么。然而,基于底层 API 已经发生巨大变化的事实,我的假设是该插件从根本上被破坏了,直到有人将其分支为 2.X 或 Elastic 推出了他们自己的版本(据说这是在某个未确定的时间点出现 future )。

其次,如果有某种方法可以在不禁用直接流式传输的情况下获取请求正文,我只是错过了它。我很感激那里的指导。

第三,如果有人对我如何在 Controller 操作级别禁用直接流传输有任何想法,而不影响我的 Ninject 设置或全局应用它,请随时加入。

最后,如果 Elastic 团队的某个人能告诉我禁用直接流式传输的影响以及由此可能产生的潜在问题,那就太好了,这样我就可以确定在全局范围内应用它是否明智。

最佳答案

.DisableDirectStreaming()设置为 true,请求字节和响应字节缓冲在内存流中,以使它们能够通过 response.RequestBodyInBytes 用于响应。和 response.ResponseBodyInBytes , 分别。

默认情况下,它设置为 false ,因此请求类型例如SearchDescriptor<T> , SearchRequest<T>等直接序列化为http请求的请求流,类似地,响应类型从响应流中反序列化。因此,将其设置为 true 的开销是在响应的生命周期(以及 GC 启动)内将请求和响应字节保留在内存中。

使用连接设置,最好在应用程序的生命周期内拥有一个实例;序列化设置缓存每个连接设置以及字段和属性表达式的缓存。目前没有办法在每个请求的基础上保留请求和响应字节,即临时内省(introspection),但我认为这将是一个有用的补充;我会为它添加一个问题:)

我个人对 Glimpse 集成并不太熟悉,但我预计由于某些更改,它需要更新才能与 NEST 2.x 一起使用。只是简单地看了一下,这些变化看起来很简单。看起来无需设置 .DisableDirectStreaming() 就可以做到这一点为真,但仅在将请求字节写入请求流之前获取它们。

关于elasticsearch - 使用 2.X NEST 客户端获取搜索响应的请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38105355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com