Elasticsearch原理学习(六)springboot集成elasticsearch

时间:2021-6-7 作者:qvyue

一、配置

pom依赖

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

        
        org.springframework.bootspring-boot-starter-data-elasticsearch2.3.9.RELEASE

配置文件:

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 {
}

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 getAll();

    TestEsDO getById(Long id);

    TestEsDO save(TestEsDO testEsDO);

    void delete(Long id);

    Page findByPageable();
}

serviceImpl

import java.util.List;

/**
 * Description:
 * Create Date: 2021-03-24T14:09:18.513
 * Modified By:
* Modified Date:
* Why & What is modified:
* * @author weirx * @version 1.0 */ @Service public class TestEsServiceImpl implements TestEsService { @Autowired private TestEsMapper testEsMapper; @Override public List getAll() { Iterable all = testEsMapper.findAll(); List 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 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 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 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 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信息。

Elasticsearch原理学习(六)springboot集成elasticsearch
kibana

新建数据

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

Elasticsearch原理学习(六)springboot集成elasticsearch
kibana

根据id获取

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

Elasticsearch原理学习(六)springboot集成elasticsearch
结果

获取全部

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

Elasticsearch原理学习(六)springboot集成elasticsearch
结果

删除文档信息

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

Elasticsearch原理学习(六)springboot集成elasticsearch
kibana

分页条件查询

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

Elasticsearch原理学习(六)springboot集成elasticsearch
结果
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。