SpringBoot集成Elasticsearch

最近项目中需要用到es查询数据,就自己springboot环境集成了elasticsearch,结果使用时候一直出错,直接请求es地址是没问题的,就查了好多资料,现在记录一下

1.遇到的问题

发生ccs_minimize_roundtrips 问题

在这里插入图片描述

{“error”:{“root_cause”:[{“type”:“illegal_argument_exception”,“reason”:“request [/logstash-filebeat-label_timely_detail_202105_v1/_search] contains unrecognized parameter: [ccs_minimize_roundtrips]”}],“type”:“illegal_argument_exception”,“reason”:“request [/logstash-filebeat-label_timely_detail_202105_v1/_search] contains unrecognized parameter: [ccs_minimize_roundtrips]”},“status”:400}

查询资料说是版本问题,我的SpringBoot版本是2.3.7.RELEASE,elasticsearch版本默认是7.6.2,需要保持一致,我改了elasticsearch版本为7.6.2,结果还是发生上面那个问题

在这里插入图片描述
通过直接请求es,说明es安装上没有问题的,注意es的版本是6.7.0,不能使用7.*版本,所以本地把elasticsearch版本改成了6.4.2,同时需要修改springboot版本,与elasticsearch6.4.2版本对于的是springboot版本2.1.5,重启请求发现不出错了

2.maven配置

springboot

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.5.RELEASE</version>
        </dependency>

elasticsearch

  <!-- es -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.4.2</version>
        </dependency>

3.项目中使用

ElasticsearchConfig


@Configuration
public class ElasticsearchConfig {

    @Value("${elasticsearch.hostname}")
    private String hostname;

    @Value("${elasticsearch.port}")
    private int port;


    /**
     * HighLevelRestConfig
     *
     * @param
     * @return org.elasticsearch.client.RestClient
     * @author wliduo[i@dolyw.com]
     * @date 2019/8/12 18:56
     */
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        // 如果有多个从节点可以持续在内部new多个HttpHost,参数1是IP,参数2是端口,参数3是通信协议
        return new RestHighLevelClient(RestClient.builder(new HttpHost(hostname, port, "http")));
    }

application.xml

# Elasticsearch配置
elasticsearch.hostname=10.185.**.**
elasticsearch.port=9200

service中使用

  @Autowired
    private RestHighLevelClient restHighLevelClient;

 @Override
    public ResponseData sampleSearch(ContentSampleSearchDTO sampleSearchDTO) throws Exception {
        String date =DateUtils.format(new Date(),"yyyyMM");
        SearchRequest searchRequest = new SearchRequest(String.format(CommonConst.ELASTICSEARCH_CONTENT_INDEX,date));
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

        //一级标签
        if (CheckUtil.isNotBlank(sampleSearchDTO.getFtag())) {
            queryBuilder.should(QueryBuilders.matchQuery("columns.level1_tagid", sampleSearchDTO.getFtag()));
        }
        //二级标签
        if (CheckUtil.isNotBlank(sampleSearchDTO.getStag())) {
            queryBuilder.should(QueryBuilders.matchQuery("columns.level2_tagid", sampleSearchDTO.getStag()));
        }
        //三级标签
        if (CheckUtil.isNotBlank(sampleSearchDTO.getTag())) {
            queryBuilder.should(QueryBuilders.matchQuery("columns.level3_tagid", sampleSearchDTO.getTag()));
        }
        //mid
        if (CheckUtil.isNotBlank(sampleSearchDTO.getMid())) {
            String[] mids = sampleSearchDTO.getMid().split(",");
            queryBuilder.should(QueryBuilders.termsQuery("columns.mid", mids));
        }
        //关键词类型
        if (CheckUtil.isNotBlank(sampleSearchDTO.getKeywordType())) {
            queryBuilder.should(QueryBuilders.matchQuery("columns.keyword_type", sampleSearchDTO.getKeywordType()));
        }
        //关键词
        if (CheckUtil.isNotBlank(sampleSearchDTO.getKeyword())) {
            queryBuilder.should(QueryBuilders.matchQuery("columns.keyword", sampleSearchDTO.getKeyword()));
        }
        //开始时间
        if (CheckUtil.isNotBlank(sampleSearchDTO.getStartTime())) {
            queryBuilder.should(QueryBuilders.rangeQuery("columns.mark_time").gte(sampleSearchDTO.getStartTime()));
        }
        //结束时间
        if (CheckUtil.isNotBlank(sampleSearchDTO.getEndTime())) {
            queryBuilder.should(QueryBuilders.rangeQuery("columns.mark_time").lte(sampleSearchDTO.getStartTime()));
        }

        sourceBuilder.query(queryBuilder);
        sourceBuilder.from(0).size(10);
        searchRequest.source(sourceBuilder);
        // 查询ES
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] result = searchResponse.getHits().getHits();
        // 处理返回数据
        JSONArray array = new JSONArray();
        for (SearchHit hit :result){
            Map<String, Object> map = hit.getSourceAsMap();
            JSONObject json = new JSONObject(map);
            array.add(json.getJSONObject("columns"));
        }
        return ResponseData.success().setData(array);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值