weixin_37915069 2024-04-15 08:30 采纳率: 0%
浏览 16

java使用RestHighLevelClient操作elasticsearch客户端异常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;

img

  • 写回答

6条回答 默认 最新

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

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

    根据您提供的信息,看起来在尝试使用Java的RestHighLevelClient与Elasticsearch进行交互时遇到了一个Content-Type错误。这通常意味着您的请求被服务器拒绝,因为它期望的是JSON格式的数据,但接收到的是HTML。

    为了解决这个问题,我们需要检查以下几个方面:

    1. 确保请求正确地设置了Content-Type头为application/json
    2. 检查请求体是否包含有效的JSON数据。
    3. 如果是在IDE(如IntelliJ IDEA)中调试,确保IDE没有自动设置其他默认的HTTP头。

    首先,确保您在创建RequestOptions时设置了正确的Content-Type。以下是示例代码:

    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestHighLevelClient;
    
    public class ElasticsearchClientExample {
    
        private RestHighLevelClient client;
    
        // 初始化方法,这里省略了RestHighLevelClient的初始化步骤
        public ElasticsearchClientExample(RestHighLevelClient client) {
            this.client = client;
        }
    
        public SearchResponse performSearch(ProductSearchDT productSearchDT0, boolean isAgg) throws Exception {
            SearchRequest searchRequest = buildSearchRequest(productSearchDT0, isAgg);
            
            // 设置Content-Type为application/json
            RequestOptions options = RequestOptions.DEFAULT.toBuilder()
                    .headers(httpHeaders -> httpHeaders.add("Content-Type", "application/json"))
                    .build();
    
            SearchResponse response = null;
            try {
                response = client.search(searchRequest, options);
            } catch (Exception e) {
                throw new Exception("Error executing search request: " + e.getMessage(), e);
            }
            return response;
        }
    
        private SearchRequest buildSearchRequest(ProductSearchDT productSearchDT0, boolean isAgg) {
            // 根据您的需求构建SearchRequest对象
            // 这里只是一个示例,你需要替换为实际的查询条件
            SearchRequest searchRequest = new SearchRequest("your_index_name");
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            sourceBuilder.query(QueryBuilders.matchAllQuery());
            searchRequest.source(sourceBuilder);
    
            if(isAgg) {
                // 添加聚合条件,如果需要的话
                AggregationBuilder aggregation = ...; // 创建聚合条件
                sourceBuilder.aggregation(aggregation);
            }
    
            return searchRequest;
        }
    
        public static void main(String[] args) {
            // 在此处调用performSearch方法并传递参数
        }
    }
    

    请确保ProductSearchDT类中的数据结构以及在buildSearchRequest方法中设置的查询条件是正确的JSON格式。此外,如果您使用的是Spring Boot或其他框架,请检查是否有任何配置或拦截器可能影响了请求头的设置。

    如果问题仍然存在,请提供更详细的错误堆栈跟踪,以便更好地定位问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月15日

悬赏问题

  • ¥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)