仿牛客网社区项目(二十九)Spring boot整合Ealsticsearch

Spring boot整合Ealsticsearch

  • 引入依赖
    • spring-boot-starter-data-elasticsearch
  • 配置Elasticsearch
    • Redis和Es底层都用到了Netty,有启动冲突。解决:在CommunityApplication类加入初始化方法进行配置。
  • Spring Data Elasticsearch(调用API)
    • ~~ ElasticsearchTemplate(集成了Es的CRUD方法)~~
    • RestHighLevelClient 新版ES的CRUD
    • ElasticsearchRepository(接口,底层为ElasticsearchTemplate,用起来更方便,新版ES也可见用)
  1. 导入依赖 我是用的es版本是7.6.2
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
   </dependency>
   <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.6.2</version>
   </dependency>

springboot的版本对应的es版本也不同 我这是2.3.7的springboot,用的也是2.3.7的依赖

image-20220419174054502

  1. 这个启动冲突不太了解 为了方便加上无妨 ,在启动类中添加一个初始化方法
    @PostConstruct
    public void init() {
        // 解决netty启动冲突问题
        // see Netty4Utils.setAvailableProcessors()
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }
  1. 不需要写yml,注入config即可
@Configuration
public class ElasticSearchClientConfig {


    //配置RestHighLevelClient依赖到spring容器中待用
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        //绑定本机,端口,协议,如果是ES集群,就配置多个
                        new HttpHost("192.168.223.129",9200,"http")));
        return client;
    }

4.对DIscusspost类做处理

@Document(indexName = "discusspost", shards = 6, replicas = 3)
public class DiscussPost {
        @TableId(value = "id",type = IdType.AUTO)
        private Integer id;
        
        @Field(type = FieldType.Integer)
        private int userId;
        
        @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
        private String title;

        @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
        private String content;

        @Field(type = FieldType.Integer)
        private int type;

        @Field(type = FieldType.Integer)
        private int status;

        @Field(type = FieldType.Date,format = DateFormat.basic_date)
        private Date createTime;

        @Field(type = FieldType.Integer)
        private int commentCount;

        @Field(type = FieldType.Double)
        private double score;

}

5.创建一个Repository类用于操作

@Repository
public interface DiscussPostRepository extends ElasticsearchRepository<DiscussPost, Integer> {
    //内置了很多方法,可以像数据库一样增删改查

}
posted @   卷皇  阅读(492)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示
主题色彩