概述
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/