美文网首页计算机学习SpringbootDocker+
Elasticsearch原理学习(六)springboot集成

Elasticsearch原理学习(六)springboot集成

作者: 我犟不过你 | 来源:发表于2021-04-12 17:32 被阅读0次

    一、配置

    pom依赖

    引入pom依赖,我引用的版本中引入的elasticsearch版本是7.6.X。

            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
                <version>2.3.9.RELEASE</version>
            </dependency>
    

    配置文件:

    spring:
      elasticsearch:
        rest:
          uris: http://127.0.0.1:9200
    

    二、创建测试代码

    实体类

    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;
    
    /**
     * @description: 测试es实体
     * @author:weirx
     * @date:2021/4/12 15:33
     * @version:3.0
     */
    @Data
    @Document(indexName = "test_es", shards = 3, replicas = 1)
    public class TestEsDO {
    
        @Id
        private Long id;
    
        @Field(type = FieldType.Text, analyzer = "ik_max_word")
        private String name;
    
        @Field(type = FieldType.Text, analyzer = "ik_max_word")
        private String desc;
    }
    

    mapper

    import com.cloud.bssp.user.entity.TestEsDO;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    import org.springframework.stereotype.Repository;
    
    /**
     * @description: 测试es持久层
     * @author:weirx
     * @date:2021/4/12 15:35
     * @version:3.0
     */
    @Repository
    public interface TestEsMapper extends ElasticsearchRepository<TestEsDO, Long> {
    }
    

    service

    import com.cloud.bssp.user.entity.TestEsDO;
    
    import java.util.List;
    
    /**
     * description: es测试service
     *
     * @author: weirx
     * @time: 2021/4/12 16:28
     */
    public interface TestEsService {
    
        List<TestEsDO> getAll();
    
        TestEsDO getById(Long id);
    
        TestEsDO save(TestEsDO testEsDO);
    
        void delete(Long id);
    
        Page<TestEsDO> findByPageable();
    }
    

    serviceImpl

    import java.util.List;
    
    /**
     * Description:
     * Create Date: 2021-03-24T14:09:18.513
     * Modified By:<br>
     * Modified Date:<br>
     * Why & What is modified:<br>
     *
     * @author weirx
     * @version 1.0
     */
    @Service
    public class TestEsServiceImpl implements TestEsService {
    
        @Autowired
        private TestEsMapper testEsMapper;
    
        @Override
        public List<TestEsDO> getAll() {
            Iterable<TestEsDO> all = testEsMapper.findAll();
            List<TestEsDO> testEsDOS = IterUtil.toList(all);
            return testEsDOS;
        }
    
        @Override
        public TestEsDO getById(Long id) {
            return testEsMapper.findById(id).get();
        }
    
        @Override
        public TestEsDO save(TestEsDO testEsDO) {
            return testEsMapper.save(testEsDO);
        }
    
        @Override
        public void delete(Long id) {
            testEsMapper.deleteById(id);
        }
    
        @Override
        public Page<TestEsDO> findByPageable() {
            //设置排序(排序方式,正序还是倒序,排序的 id)
            Sort sort = Sort.by(Sort.Direction.DESC, "id");
            //当前页,第一页从 0 开始,1 表示第二页
            int currentPage = 0;
            //每页显示多少条
            int pageSize = 5;
            //设置查询分页
            PageRequest pageRequest = PageRequest.of(currentPage, pageSize, sort);
            //查询条件
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "elasticsearch");
            //分页查询
            Page<TestEsDO> page = testEsMapper.search(termQueryBuilder,pageRequest);
            return page;
        }
    }
    

    controller

    import com.cloud.bssp.user.dto.UserDTO;
    import com.cloud.bssp.user.entity.TestEsDO;
    import com.cloud.bssp.user.service.TestEsService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /**
     * description: es测试控制器
     *
     * @author: weirx
     * @time: 2021/4/12 16:29
     */
    @Slf4j
    @RestController
    @RequestMapping("/es")
    public class TestEsController {
    
        @Autowired
        private ElasticsearchRestTemplate elasticsearchRestTemplate;
    
        @Autowired
        private TestEsService testEsService;
    
        @RequestMapping("/getAll")
        public List<TestEsDO> getAll() {
            return testEsService.getAll();
        }
    
        @RequestMapping("/getById")
        public TestEsDO getById(Long id) {
            return testEsService.getById(id);
        }
    
        @RequestMapping("/save")
        public TestEsDO save() {
            TestEsDO testEsDO = new TestEsDO();
            testEsDO.setId(1000L);
            testEsDO.setName("elasticsearch");
            testEsDO.setDesc("hello elasticsearch, 你好,elasticsearch");
            return testEsService.save(testEsDO);
        }
    
        @RequestMapping("/delete")
        public void delete(Long id) {
            testEsService.delete(id);
        }
    
        @RequestMapping("/createIndex")
        public void createIndex() {
            elasticsearchRestTemplate.createIndex(TestEsDO1.class);
            elasticsearchRestTemplate.putMapping(TestEsDO1.class);
        }
    
        @RequestMapping("/page")
        public Page<TestEsDO> page() {
            return testEsService.findByPageable();
        }
    
    }
    

    三、测试

    启动项目

    关注以下两条日志信息,发现一条创建索引,一条是设置mapping的,索引名称是在实体类上配置的名称。

    2021-04-12 16:34:02.949  WARN 36752 --- [/O dispatcher 1] o.e.c.RestClient                         : request [PUT http://127.0.0.1:9200/test_es?master_timeout=30s&include_type_name=true&timeout=30s] returned 1 warnings: [299 Elasticsearch-7.9.2-d34da0ea4a966c4e49417f2da2f244e3e97b4e6e "[types removal] Using include_type_name in create index requests is deprecated. The parameter will be removed in the next major version."]
    2021-04-12 16:34:03.031  WARN 36752 --- [/O dispatcher 1] o.e.c.RestClient                         : request [PUT http://127.0.0.1:9200/test_es/_mapping/testesdo?master_timeout=30s&include_type_name=true&timeout=30s] returned 1 warnings: [299 Elasticsearch-7.9.2-d34da0ea4a966c4e49417f2da2f244e3e97b4e6e "[types removal] Using include_type_name in put mapping requests is deprecated. The parameter will be removed in the next major version."]
    
    

    使用restTemplate创建一条索引,并创建mapping。

    复制一份实体类:

    package com.cloud.bssp.user.entity;
    
    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;
    
    /**
     * @description: 测试es实体
     * @author:weirx
     * @date:2021/4/12 15:33
     * @version:3.0
     */
    @Data
    @Document(indexName = "test_es_1", shards = 3, replicas = 1)
    public class TestEsDO1 {
    
        @Id
        private Long id;
    
        @Field(type = FieldType.Text, analyzer = "ik_max_word")
        private String name;
    
        @Field(type = FieldType.Text, analyzer = "ik_max_word")
        private String desc;
    }
    
    

    调用http://localhost:8088/es/createIndex,查看kibana信息。

    kibana

    新建数据

    调用http://localhost:8088/es/save,查看kibana结果:

    kibana

    根据id获取

    调用http://localhost:8088/es/getById?id=1000,返回结果:

    结果

    获取全部

    调用http://localhost:8088/es/getAll,返回结果:

    结果

    删除文档信息

    调用http://localhost:8088/es/delete?id=1000,查看kibana:

    kibana

    分页条件查询

    调用http://localhost:8088/es/page,查看结果:

    结果

    相关文章

      网友评论

        本文标题:Elasticsearch原理学习(六)springboot集成

        本文链接:https://www.haomeiwen.com/subject/asuxlltx.html