weixin_37915069 2024-04-19 11:46 采纳率: 0%
浏览 4

java引入操作elasticsearch7.17.14版本客户端异常Content-Type: text/html

elasticsearch客户端是7.17.14,java项目里面引入的包也是7.17.14,搜索的时候总是异常org.elasticsearch.ElasticsearchException: Failed to parse info response. Check logs for detailed information - Unsupported Content-Type: text/html; 单独在kibana-7.17.14执行DSL语句没有异常,重启elasticsearch客户端就不报这个错误了 但是当再次重启应用的时候再搜索这个异常就会再次出现

img

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-19 11:46
    关注

    引自免费微信小程序:皆我百晓生

    看起来你正在尝试通过Java客户端与Elasticsearch进行交互,但遇到了Content-Type: text/html的问题。这通常意味着服务器返回的响应不是JSON格式,而是HTML,这通常是由于服务器错误或其他非预期情况导致的。

    为了解决这个问题,首先检查以下几个方面:

    1. 确保你的Elasticsearch集群运行正常,并且没有错误日志。
    2. 检查是否有任何防火墙或代理设置可能干扰了HTTP通信。
    3. 在发送请求之前,确认你的Java客户端已经正确设置了请求头。

    根据你的代码片段,你已经设置了请求头为Content-Type: application/jsonAccept: application/json,这是正确的做法。然而,为了确保所有请求都包含这些头信息,你可以在创建RestHighLevelClient时设置全局请求头。这样可以避免每次调用都需要手动添加头信息。

    以下是创建带有全局请求头的RestHighLevelClient的示例代码:

    import org.apache.http.HttpHost;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    
    public class ElasticsearchClient {
        private static final String CLUSTER_HOST = "localhost"; // 替换为你的Elasticsearch主机地址
        private static final int CLUSTER_PORT = 9200; // 替换为你的Elasticsearch端口号
    
        public static RestHighLevelClient createClient() {
            RestClient.Builder restClientBuilder = RestClient.builder(new HttpHost(CLUSTER_HOST, CLUSTER_PORT, "http"))
                    .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultHeaders(headers -> {
                        headers.set("Content-Type", "application/json");
                        headers.set("Accept", "application/json");
                    }));
    
            return new RestHighLevelClient(restClientBuilder);
        }
    }
    

    然后,在你的代码中使用这个方法创建RestHighLevelClient实例:

    RestHighLevelClient client = ElasticsearchClient.createClient();
    
    // ...其他代码...
    
    SearchResponse response = null;
    try {
        response = client.search(searchRequest, RequestOptions.DEFAULT);
    } catch (IOException e) {
        Log.error(e.toString());
        throw new ElasticsearchException("搜索服务出了点小差,请稍后再试");
    }
    

    如果以上步骤无法解决问题,那么可能是Elasticsearch集群内部出现了问题,这时你需要检查Elasticsearch的日志文件,寻找关于异常的详细信息。如果问题依然存在,建议提供更多的日志输出以便进一步分析。

    注意:这里的代码示例假设你的Elasticsearch集群运行在本地主机(localhost)上,端口号为默认值 9200。请根据实际情况修改这些值。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月19日

悬赏问题

  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)