【问题标题】:elasticsearch: convert StreamOutput to Stringelasticsearch:将 StreamOutput 转换为字符串
【发布时间】:2017-08-13 14:11:39
【问题描述】:

我将覆盖FilterClient,这样我就可以看到传入的请求。我想要一些方法来获取传入的ActionRequest 的String 表示。ActionRequest 让我们写信给StreamOuput,这是一个 Elasticsearch 类型,它是OutputStream 的子类。这个SO post 展示了如何将OutputStream 转换为字符串,但由于FilterClient API,我不得不使用StreamOuput。

我如何获得ActionRequest 的字符串表示形式,或者至少是一个可读的版本,它将向我显示有关请求的有用信息? (调用ActionRequest.toString 调用Object.toString,这对我来说不够好。)

【问题讨论】:

  • StreamOuput extends OutputStream 所以你不能把它用作OutputStream吗?
  • 我不明白你的建议。我链接到的 SO 帖子建议使用 ByteArrayOutputStream。但是您不能在预期 StreamOutput 的地方使用 ByteArrayOutputStream。也许您可以在解决方案中包含一些代码,以便我理解。

标签: java elasticsearch java-stream


【解决方案1】:

StreamOutput 是一个抽象类,它有一个名为OutputStreamStreamOutput 的子类。后者基本上是OutputStream 的包装器,因此您需要创建一个包装ByteArrayOutputStream 的实例,然后在ActionRequest.writeTo() 调用中使用它。

// in your override doExecute method, add this:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamStreamOutput osso = new OutputStreamStreamOutput(baos);

request.writeTo(osso);
String requestAsString = baos.toString("UTF-8");

【讨论】:

  • 这看起来很接近我的需要,但我在输出中得到了一堆“s”。我认为它输出了正确的请求字段名称,但这些值都是乱码。有什么想法吗?
  • 也许你得到的内容是二进制的而不是文本的......或者根本没有用 UTF-8 编码
  • 是否有特定的标志/配置设置了 Elasticsearch 请求的编码?
  • 你能分辨出你拦截的是哪个请求吗?
  • 请求可能是一堆不同的请求类型,包括SearchRequest、BulkRequest、MultiGetRequest。这是你的意思吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2019-01-05
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多