加载中

修复错误:无法解析响应正文

				
					Error: Unable to parse response body
		

当 Elasticsearch 无法处理响应正文时,会出现此错误,这可能是由于格式或语法不正确导致的。要解决此问题,请确保响应正文格式正确(通常为 JSON),并且所有语法均正确无误。

如果错误仍然存在,请从以下通用步骤开始排查

  • 查看 Elasticsearch 日志以获取更详细的错误消息。
  • 将 Elasticsearch 更新到最新版本。

如果您使用的是高级 Java REST 客户端,请继续阅读下一节。

警告

Java REST 客户端已弃用。请改用 Java API 客户端

当高级 Java REST 客户端无法解析低级 Elasticsearch 客户端接收到的响应时,可能会发生此错误。

REST 高级客户端充当了低级客户端的包装器。低级客户端最终负责向集群执行 HTTP 请求。如果返回给高级客户端的响应格式错误或不符合预期模式,客户端就会抛出 unable to parse response body 异常。

使用以下章节来确定并修复该错误的根本原因。

Elasticsearch 不保证不同主要版本之间的兼容性。请确保客户端版本与 Elasticsearch 版本相匹配。有关更多详细信息,请参阅 Elasticsearch Java 服务器兼容性策略

如果您的集群位于反向代理之后,并且您已设置访问它的路径前缀,请确保配置高级客户端以包含该路径前缀,以便代理能将请求正确路由到集群。

例如,假设您有一个 Nginx 反向代理在 mycompany.com:80 接收连接,并且设置了 /elasticsearch 路径前缀以将连接代理到您基础设施中运行的集群。/elasticsearch 路径前缀必须在您用于访问集群的客户端上进行配置,而不仅仅是在主机 (mycompany.com) 上配置。

使用 setPathPrefix() 来设置路径前缀

new RestHighLevelClient(
  RestClient.builder(
    new HttpHost("mycompany.com", 80, DEFAULT_SCHEME_NAME))
    .setPathPrefix("/elasticsearch")
);
		

有关更多背景信息,请参阅以下 Elastic 社区论坛帖子

当批量索引大量数据时,可能会出现 unable to parse response body 错误。默认情况下,Elasticsearch 的 HTTP 请求正文最大大小为 100 MB。要提高此限制,请增加 Elasticsearch 配置文件中 http.max_content_length 的值。

http.max_content_length: 200mb
		

有关 HTTP 大小限制问题的示例,请参阅此 Elastic 社区论坛帖子:使用 Java 高级 REST 客户端进行批量索引时报错

如果您的 Elasticsearch 集群在 Kubernetes 上运行并通过 Ingress 控制器暴露,请检查您的 Ingress 控制器配置。来自控制器的错误路由或格式错误的响应可能会导致客户端出现解析错误。

有关 Ingress 控制器中 SSL 重定向不正确的示例,请参阅此 Elastic 社区论坛帖子:RestHighLevelClient - 无法解析响应正文

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.