计算机学习SpringbootDocker+

Elasticsearch原理学习(六)springboot集成

2021-04-12  本文已影响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,查看结果:

结果
上一篇下一篇

猜你喜欢

热点阅读