栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot整合elasticsearch7

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot整合elasticsearch7

版本:elasticsearch7.17,jdk8

父工程依赖

   
    
        org.springframework.boot
        spring-boot-starter-web
        2.3.12.RELEASE
    
    
        org.springframework.boot
        spring-boot-starter-test
        2.3.12.RELEASE
        test
    

    
        com.meng
        service
        1.0-SNAPSHOT
    
    
        org.projectlombok
        lombok
        1.18.16
        compile
    

子工程依赖

    
        org.springframework.boot
        spring-boot-starter-test
        ${spring-boot.version}
        test
    
    
        org.springframework.boot
        spring-boot-starter-data-elasticsearch
        ${spring-boot.version}
    

application.yml(新版springboot2.3.12使用此配置,本文基于此版本)
spring:
  elasticsearch:
    rest:
      uris: 192.168.233.134:9200
application.yml(旧版springboot2.1.6使用此配置)
spring:
  data:
    elasticsearch:
      cluster-nodes: 192.168.233.134:9300
启动类
@SpringBootApplication
public class EsApplication {
    public static void main(String[] args) {
        SpringApplication.run(EsApplication.class , args);
    }
}

实体类(es7中创建索引方式好像变了,这里行不通了)
@Data
@Document(indexName = "goods" , shards = 3 , replicas = 0)
public class Goods {
    @Id
    private Integer id;

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

    @Field(type = FieldType.Keyword)
    private String category;

    @Field(type = FieldType.Keyword)
    private String images;

    @Field(type = FieldType.Integer)
    private Integer price;
}

Spring Data通过注解来声明字段的映射属性,有下面的三个注解:

  1. @Document 作用在类,标记实体类为文档对象,一般有四个属性

    indexName:对应索引库名称
    type:对应在索引库中的类型
    shards:分片数量,默认5
    replicas:副本数量,默认1
    
  2. @Id 作用在成员变量,标记一个字段作为id主键

  3. @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:

    type:字段类型,取值是枚举:FieldType
    index:是否索引,布尔类型,默认是true
    store:是否存储,布尔类型,默认是false
    analyzer:分词器名称:ik_max_word
    
Repository
public interface EsRepository extends ElasticsearchRepository {
}
ElasticsearchTemplate、ElasticsearchRepository、ElasticsearchRestTemplate区别

ElasticsearchRepository可以做Elasticsearch的相关数据的增删改查,用法和普通的接口是一样的,这样就能统一ElasticSearch和普通的JPA操作,获得和操作mysql一样的代码体验。同时也可以看到ElasticsearchRepository的功能是比较少的,简单查询够用,但复杂查询就稍微显得力不从心了。
ElasticsearchRepository继承自PagingAndSortingRepository,PagingAndSortingRepository又继承CrudRepository
ElasticsearchRepository中的方法基本都过时了

PagingAndSortingRepository中的两个方法,排序和分页

@NoRepositoryBean
public interface PagingAndSortingRepository extends CrudRepository {

	
	Iterable findAll(Sort sort);

	
	Page findAll(Pageable pageable);
}

CrudRepository中的方法就是简单的增删查改

详见es中ElasticsearchRepository 的原理和使用

ElasticsearchTemplate 则提供了更多的方法,同时也包括分页之类的,他其实就是一个封装好的ElasticSearch Util功能类,通过直接连接client来完成数据的操作

详见es中ElasticSearchTemplate类的实现原理及使用

ElasticsearchRestTemplate 在新版的SpringBoot项目中,在这个包下,推荐使用的是ElasticsearchRestTemplate这个类(ElasticsearchTemplate不推荐使用了),和之前的用法有些不同。
本文使用springboot版本:2.3.12

参考:ElasticsearchRestTemplate使用

创建索引
@Test
public void testIndex(){
    boolean goods = template.indexOps(Goods.class).create();//新版本用这个方法
    boolean goods1 = template.createIndex(User.class);  // 此方法已过时
    System.out.println("goods = " + goods);
}

结果

现在新版的API创建的索引没有mapping了,或者用其他的方法设置mapping,有一种引入外部json 的方式创建mapping,个人感觉挺好,适合项目中使用,方便查找和维护,可以参考这里es7创建索引

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000402.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号