SpringBoot整合Elasticsearch

概述

Elasticsearch 是一种分布式 RESTful 搜索和分析引擎,能够处理越来越多的用例。作为 Elastic Stack 的核心,它集中存储您的数据,以实现闪电般的快速搜索、微调相关性和可轻松扩展的强大分析。
Elasticsearch安装参考

项目版本

  • JDK 1.8
  • SpringBoot 2.5.1
  • Elasticsearch 7.10.0

Maven依赖

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

整合 Elasticsearch

配置文件

server:
  port: 8080
spring:
  jackson:
    default-property-inclusion: non_null
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    jpa:
      hibernate:
        ddl-auto: update
      show-sql: true
  elasticsearch:
    rest:
      uris: http://127.0.0.1:9200

entity 实体

package com.kang.elasticsearch.entity.es;

import lombok.Data;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import javax.persistence.Id;

/**
 * @author
 * @date 2021/6/19
 */
@Data
@Document(indexName = "esblog")
public class EsBlog {

    @Id
    private String id;
    @Field(type = FieldType.Text, analyzer = "ik_max_word",searchAnalyzer ="ik_max_word")
    private String title;
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String author;
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String content;
    @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private String createTime;
    @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private String updateTime;
}

repository 类

    public interface EsBlogRepository extends ElasticsearchRepository<EsBlog, String> {
    
        /**
         * 根据title查询
         * @param title
         * @param pageable
         * @return
         */
        Page<EsBlog> findByTitle(String title, Pageable pageable);
    }

service 类

public interface EsBlogService {

    Optional<EsBlog> findById(String id);

    EsBlog save(EsBlog blog);

    void delete(EsBlog blog);

    Optional<EsBlog> findOne(String id);

    List<EsBlog> findAll();

    Page<EsBlog> findByTitle(String title, PageRequest pageRequest);
}

service 实现类

@Service
public class EsBlogServiceImpl implements EsBlogService {

    @Autowired
    private EsBlogRepository esBlogRepository;

    @Override
    public Optional<EsBlog> findById(String id) {
        return esBlogRepository.findById(id);
    }

    @Override
    public EsBlog save(EsBlog blog) {
        return esBlogRepository.save(blog);
    }

    @Override
    public void delete(EsBlog blog) {
        esBlogRepository.delete(blog);
    }

    @Override
    public Optional<EsBlog> findOne(String id) {
        return esBlogRepository.findById(id);
    }

    @Override
    public List<EsBlog> findAll() {
        return (List<EsBlog>) esBlogRepository.findAll();
    }

    @Override
    public Page<EsBlog> findByTitle(String title, PageRequest pageRequest) {
        return esBlogRepository.findByTitle(title,pageRequest);
    }
}

Controller类

@Slf4j
@RestController
@RequestMapping("blog")
public class EsBlogController {

    @Autowired
    private EsBlogService esBlogService;

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    /**
     * 创建索引
     */
    @PostMapping("/create")
    public void createIndex() {
        elasticsearchRestTemplate.indexOps(EsBlog.class);
    }

    @PostMapping("/save")
    public void save(@RequestBody EsBlog esBlog) {
        log.warn(esBlog.toString());
        esBlogService.save(esBlog);
    }

    @GetMapping("/id/{id}")
    public EsBlog getEsBlogById(@PathVariable String id) {
        Optional<EsBlog> opt = esBlogService.findById(id);
        EsBlog esBlog = opt.get();
        log.warn(esBlog.toString());
        return esBlog;
    }

    @PostMapping("/findBlog")
    public List<EsBlog> findBlog(@RequestBody BlogMode blogMode) {
        Page<EsBlog> blogPage = esBlogService.
                findByTitle(blogMode.getTitle(),
                        PageRequest.of(0, 1));
        return blogPage.getContent();
    }
}

启动类

    @SpringBootApplication
    public class ElasticsearchApplication {
        public static void main(String[] args) {
            SpringApplication.run(ElasticsearchApplication.class, args);
        }
    }

测试

1、启动Elasticsearch ,通过 Http 发送一条记录到 ES 。

POST localhost:8080/blog/save {“id”:“3”,“title”:“SpringBoot3”,“content”:“SpringBoot Mybatis”}

2、在 Elasticsearch Head 插件中,通过 http://localhost:9200/ 地址查看保存记录。
在这里插入图片描述
也可以通过以下 Http请求,查看 ES 中的数据。

POST localhost:8080/blog/findBlog {“title”:“SpringBoot”,“content”:“SpringBoot”}

参考

https://www.elastic.co/elasticsearch/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值