springboot整合Elasticsearch的曲折之路

记录一下在使用JAVA API方式操作ES时一路上遇到的各种Error

我使用的MAVEN版本分别是springboot 2.2.5.RELEASE Eelasticsearch 7.3.1 ES Server 7.6.1 阿里云部署。

java.lang.NoSuchMethodError: org.elasticsearch.client.Request.addParameters(Ljava/util/Map;)V

这是在只导入以下maven 依赖之后当我调用restHighLevelClient.indices().exists提示的报错:

<dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.3.1</version>
</dependency>
<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.3.1</version>
</dependency>

报错原因是因为高版本的依赖内部指定的是低版本的rest-client
在这里插入图片描述
所以首先需要忽略掉低版本的rest-client 依赖,再导入指定的版本依赖,然后错误解除

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.3.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>elasticsearch-rest-client</artifactId>
                    <groupId>org.elasticsearch.client</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.3.1</version>
        </dependency>

5000 socketTimeout Caused by: java.net.ConnectException: Timeout connecting to [/**********:9200]

紧接着再次调用控制台继续报错,提示连接超时,这个是因为设置的sockettimeout 时间导致的,大家可以根据自己的情况延长超时时间:(我直接再加一颗零)
在这里插入图片描述

master_not_discovered_exception reason null status 503 The service is unavailable

继续过关斩将,新的报错又出现了。。。
这次直接503 服务不可用了,然后将目标转向服务端的配置:
发现是在elasticsearch.yml配置文件下我配置的node节点名称不对
在这里插入图片描述
这个是集群环境下的master-node的配置 其中以上报错是找不到master-node,因为我配置的这个name实际上是不存在的 ,所以只需要修改为当前的node.name: node-1
在这里插入图片描述

analyzer [ik_max_word] not found for field [title]

*再次调用之后又报错,这次报错是关于ik分词器的,因为我在代码中进行调用的时候指定了要使用ik分词,结果服务器发现不存在,后来在服务器上一查 结果是忘记装ik插件了,所以赶紧安装了

Likely root cause: java.nio.file.FileSystemException: /home/es/elasticsearch-7.6.1/plugins/elasticsearch-analysis-ik-7.6.1.jar/plugin-descriptor.properties: Not a directory

安装完成ik之后又提示这个,网上各种查资料有说需要clean compiler package的,但是我的不是因为这个问题,我的是因为我的ik.zip包是直接在ES server 安装目录下的plugins目录下直接unzip的,后来我在plugins下新建了一个目录叫ik ,然后在ik目录下在重新解压 然后重启server 问题解除!

结语

OK,这些就是我在自己搭建es再用springboot整合时遇到的一些问题,很烦。
希望以上报错可以帮助到其他人,如果觉得有用的话,不要吝啬的你的点赞,将是我继续分享的动力!谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringBoot整合Elasticsearch常用API主要包括以下几个方面: 1. 配置Elasticsearch信息 首先需要在application.yml中配置Elasticsearch的连接信息: ``` spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 127.0.0.1:9300 ``` 2. 创建ElasticsearchRepository 在SpringBoot中,可以通过ElasticsearchRepository来访问Elasticsearch,只需要继承该接口即可。 ``` public interface UserRepository extends ElasticsearchRepository<User, Long> { } ``` 其中,User是实体类,Long是主键类型。 3. 创建实体类 创建实体类,使用注解来映射Elasticsearch中的索引和字段。 ``` @Document(indexName = "user", type = "_doc") public class User { @Id private Long id; @Field(type = FieldType.Keyword) private String name; @Field(type = FieldType.Integer) private Integer age; // getter and setter } ``` 4. 增删改查 通过ElasticsearchRepository提供的方法,可以实现增删改查的操作。如下: ``` @Autowired UserRepository userRepository; // 新增 userRepository.save(user); // 删除 userRepository.deleteById(id); // 修改 userRepository.save(user); // 查询 Optional<User> optional = userRepository.findById(id); ``` 5. 搜索 Elasticsearch提供了丰富的搜索API,可以通过QueryBuilder来构建查询条件,通过SearchRequest来执行搜索操作。如下: ``` @Autowired RestHighLevelClient restHighLevelClient; // 构建查询条件 QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "张三"); // 构建SearchRequest SearchRequest searchRequest = new SearchRequest("user"); searchRequest.types("_doc"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(queryBuilder); searchRequest.source(searchSourceBuilder); // 执行搜索 SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 处理搜索结果 SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits) { String sourceAsString = hit.getSourceAsString(); User user = JSON.parseObject(sourceAsString, User.class); System.out.println(user); } ``` 以上就是SpringBoot整合Elasticsearch常用API的介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一名软件修理工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值