• Springboot集成ElasticSearch实现简单的crud、简单分页、模糊查询


    pom.xml引入ElasticSearch

            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-elasticsearchartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    application.yml配置

    spring:
      elasticsearch:
        uris: 
          - localhost:9200
        username: elastic
        password: password
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    启动类加入注解@EnableElasticsearchRepositories

    @EnableElasticsearchRepositories(basePackages = "com.meta.es.repositories")//repository所在的包路径
    @SpringBootApplication
    public class SpringBootApplication {
    	public static void main(String[] args) {
            SpringApplication.run(SpringBootApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ElasticSearchEntity

    import lombok.Data;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.elasticsearch.annotations.Document;
    import org.springframework.data.elasticsearch.annotations.Field;
    import org.springframework.data.elasticsearch.annotations.FieldType;
    import java.util.Date;
    
    @Data
    @Document(indexName = "elastic")//indexName索引名称等价于MySQL的表
    public class ElasticSearchEntity {
        @Id
        @Field(type = FieldType.Keyword)//关键字在查询的时候不会被拆分
        private String id;
    
        @Field(type = FieldType.Text)//字符串对应文本类型
        private String name;
    
        @Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second_millis)//日期类型
        @JsonSerialize(using = LocalDateTimeSerializer.class)
        @JsonDeserialize(using = LocalDateTimeDeserializer.class)
        private Date createTime;
    
    	@Field(type = FieldType.Boolean)//布尔类型
        private boolean isDelete;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    Repository类继承ElasticsearchRepository

    import org.springframework.data.elasticsearch.annotations.Query;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    import java.util.List;
    
    //ElasticsearchRepository<实体类,主键类型>
    public interface ElasticSearchRepository extends ElasticsearchRepository<ElasticSearchEntity,String> {
        List<ElasticSearchEntity> findByName(String name);
    	
    	//自定义查询语句
        @Query("{\"match\":{\"name\":\"?0\"}}")
        List<ElasticSearchEntity> findAllByNameUsingAnnotations(String name);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ElasticSearchService

    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.domain.Sort;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @Service
    public class ElasticSearchService {
        @Resource
        private ElasticSearchRepository elasticSearchRepository;
    
        /**
         * 新增/修改
         */
        public void save(final ElasticSearchEntity elasticSearchEntity) {
            this.elasticSearchRepository.save(elasticSearchEntity);
        }
    
        /**
         * 通过ID查询
         */
        public ElasticSearchEntity findById(final String id){
            return this.elasticSearchRepository.findById(id).orElse(null);
        }
    
        /**
         * 通过ID删除
         */
        public void deleteById(String id){
            this.elasticSearchRepository.deleteById(id);
        }
    
        /**
         * 通过名称模糊查询
         */
        public List<ElasticSearchEntity> findByName(final String name){
            return this.elasticSearchRepository.findByName(name);
        }
    
        /**
         * 通过使用注解名称模糊查询
         */
        public List<ElasticSearchEntity> findAllByNameUsingAnnotations(String name){
            return this.elasticSearchRepository.findAllByNameUsingAnnotations(name);
        }
    
        /**
         * 分页
         * @param size 数量
         */
        public Page<ElasticSearchEntity> findAllByPage(int page,int size){
            //Sort sort = Sort.by(Sort.Order.desc("create_date"));//排序
            //Pageable pageable =PageRequest.of(Integer.parseInt(page), Integer.parseInt(size), sort);
            Sort sort = Sort.by(Sort.Order.desc("createTime"));//根据
            Pageable pageable =PageRequest.of(page, size, sort);
            return this.elasticSearchRepository.findAll(pageable);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    ElasticSearchController

    import org.springframework.data.domain.Page;
    import org.springframework.web.bind.annotation.*;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @RestController
    @RequestMapping("elasticsearch")
    public class ElasticSearchController {
        @Resource
        private ElasticSearchService elasticSearchService;
    
        /**
         * 新增/修改,如果id一致就修改,否则新增
         * @param elasticSearchEntity 实体类
         */
        @PostMapping
        public void save(@RequestBody final ElasticSearchEntity elasticSearchEntity) {
            elasticSearchService.save(elasticSearchEntity);
        }
    
        /**
         * 通过ID查询
         * @param id ID
         * @return
         */
        @GetMapping("/{id}")
        public ElasticSearchEntity findById(@PathVariable final String id) {
            return elasticSearchService.findById(id);
        }
    
        /**
         * 通过ID删除
         * @param id ID
         * @return
         */
        @DeleteMapping("/{id}")
        public boolean deleteById(@PathVariable String id) {
            elasticSearchService.deleteById(id);
            return true;
        }
    
        /**
         * 通过名称模糊查询
         * @param name 名称
         * @return
         */
        @GetMapping("/name/{name}")
        public List<ElasticSearchEntity> findAllByName(@PathVariable String name) {
            return elasticSearchService.findByName(name);
        }
    
        /**
         * 使用注释的方式名称模糊查询,即:@Query()注解
         * @param name 名称
         * @return
         */
        @GetMapping("/name/{name}/annotations")
        public List<ElasticSearchEntity> findAllByNameAnnotations(@PathVariable String name) {
            return elasticSearchService.findAllByNameUsingAnnotations(name);
        }
    
        /**
         * 简单分页查询
         * @param page 起始页,默认从0开始
         * @param size 每页数量
         * @return
         */
        @GetMapping("/page")
        public Page<ElasticSearchEntity> findAllByPage(@RequestParam(name = "page",defaultValue = "0") int page, @RequestParam(name = "size",defaultValue = "10") int size){
            return elasticSearchService.findAllByPage(page,size);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    测试

    查看创建的索引(相当于MySQL的表)
    method:GET

    localhost:9200/_cat/indices
    
    • 1

    删除索引
    method:DELETE

    localhost:9200/{索引名称}
    
    • 1

    查看索引里的全部数据,elastic是实体类@Document定义的indexName
    method:GET

    localhost:9200/elastic/_search
    
    • 1

    新增索引里没有ID就是新增,有ID就是修改
    在这里插入图片描述
    修改索引里没有ID就是新增,有ID就是修改
    在这里插入图片描述
    查询
    在这里插入图片描述
    删除
    在这里插入图片描述
    分页
    在这里插入图片描述
    通过name模糊查询
    在这里插入图片描述

  • 相关阅读:
    Makefile 基础(二)—— Makefile 自动推导+ Makefile伪目标
    黑马头条项目经验&BUG
    内网穿透配置(FRP)
    Workfine新手入门:操作约束
    蓝桥算法赛(铺地板)
    Sqlserver关于tempdb临时数据库文件个数的最佳实践
    文件系统,软硬链接
    SpringBoot整合Flowable
    数仓建模—埋点设计与管理
    FS2119A同步升压IC输出3.3V和FS2119B同步升压IC输出5V
  • 原文地址:https://blog.csdn.net/weixin_43933728/article/details/127904207