Elasticsearch 是什么
Elasticsearch
是一个基于 Apache Lucene 构建的分布式搜索和分析引擎,能够处理大规模数据并提供实时搜索和分析功能。它被广泛应用于日志和事件数据分析、全文搜索
、业务分析和监控等领域。
使用
在虚拟机的 Docker 容器中安装Elasticsearch
和Kibana
。Kibana 是 Elasticsearch 的可视化工具,可以方便地对数据进行展示和分析。【安装教程网上挺多的】
MySQL和ES对比
MySQL 和 Elasticsearch 的对应概念进行对比,学东西多学会类比!!
MySQL | Elasticsearch | 说明 |
---|---|---|
Table | Index | 索引(Index)是文档的集合,类似于数据库中的表(Table)。 |
Row | Document | 文档(Document)是数据记录,类似于数据库中的行(Row)。文档的格式为 JSON。 |
Column | Field | 字段(Field)是 JSON 文档中的属性,类似于数据库中的列(Column)。 |
Schema | Mapping | 映射(Mapping)定义了索引中文档的结构和字段类型约束,类似于数据库中的表结构(Schema)。 |
SQL | DSL | DSL(Domain-Specific Language)是 Elasticsearch 提供的 JSON 风格的查询语言,用于操作 Elasticsearch,实现 CRUD 操作。 |
SpringBoot中整合ElasticSearch快速入门
访问Kibana
# 创建索引
PUT /articles
# 删除索引
DELETE /articles
# 新增一条数据(文档) 我指定了id
POST /articles/_doc/1
{
"title": "运动",
"content": "喜欢打篮球,乒乓球,羽毛球"
}
POST /articles/_doc/2
{
"title": "户外",
"content": "喜欢户外骑行,打篮球"
}
# 查全部
GET /articles/_search
{
"query": {
"match_all": {}
}
}
# 根据指定字段查询
GET /articles/_search
{
"query": {
"match": {
"id": 122
}
}
}
# 模糊查询
GET /articles/_search
{
"query": {
"match": {
"content": "喜欢打篮球"
}
}
}
Springboot中操作ES
第一步:依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
第二步:yml配置文件
spring:
elasticsearch:
rest:
uris: "http://192.168.150.101:9200"
第三步:业务代码
@Document(indexName = “articles”):这个注解用于将 Article 类与 Elasticsearch 中的一个名为 articles 的索引进行关联。它告诉 Spring Data Elasticsearch 框架,这个类的对象将被映射到指定的索引中进行存储和操作。
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "articles")
@Data
public class Article {
@Id
private String id;
private String title;
private String content;
}
controller层
@RestController
@RequestMapping("/articles")
public class ArticleController {
@Autowired
private ArticleService articleService;
@PostMapping
public Article createArticle(@RequestBody Article article) {
return articleService.save(article);
}
@GetMapping("/{id}")
public Optional<Article> getArticle(@PathVariable String id) {
return articleService.findById(id);
}
@GetMapping
public Iterable<Article> getAllArticles() {
return articleService.findAll();
}
@DeleteMapping("/{id}")
public void deleteArticle(@PathVariable String id) {
articleService.deleteById(id);
}
@GetMapping("/search")
public List<Article> searchArticles(@RequestParam String title) {
return articleService.findByTitle(title);
}
}
业务层
@Service
public class ArticleService {
@Autowired
private ArticleRepository articleRepository;
public Article save(Article article) {
return articleRepository.save(article);
}
public Optional<Article> findById(String id) {
return articleRepository.findById(id);
}
public Iterable<Article> findAll() {
return articleRepository.findAll();
}
public void deleteById(String id) {
articleRepository.deleteById(id);
}
public List<Article> findByTitle(String title) {
return articleRepository.findByTitle(title);
}
}
持久层
//ElasticsearchRepository 是 Spring Data Elasticsearch 提供的一个接口,允许你在 Springboot 应用中方便地操作 Elasticsearch
public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
List<Article> findByTitle(String title);
}
测试效果
说明
在 Spring Data Elasticsearch 中,通常使用 ElasticsearchRepository
接口来简化与 Elasticsearch 的交互。与原生 Elasticsearch 客户端相比,Spring Data Elasticsearch 提供了更高层次的抽象和便利,使得常见的操作(如查询、保存、删除等)可以通过简单的方法调用来完成
❤觉得有用的可以留个关注❤