学习笔记041——Elastic Search的学习与使用以及SpringBoot整合

文章目录

  • [1、Elastic Search介绍](#1、Elastic Search介绍)
    • [1.1、ES 的数据结构](#1.1、ES 的数据结构)
    • [1.2、ES 为什么查询快](#1.2、ES 为什么查询快)
    • 1.3、CRUD
  • [2、Spring Boot 整合 ES](#2、Spring Boot 整合 ES)

1、Elastic Search介绍

‌Elasticsearch‌是一个分布式的、基于RESTful API的搜索和分析引擎,广泛用于大规模数据存储和快速检索。它最初由Shay Banon于2010年开发,是开源的,并且是Elastic Stack(通常称为ELK Stack)的核心组成部分,其他组成部分包括Logstash、Beats(用于数据收集和处理)和Kibana(用于数据可视化)‌

ES 海量数据中快速查找目标数据

EKL ES + Kibana + Logstash

1.1、ES 的数据结构

一个 ES 实例就是一个数据库实例,

索引 index 就是数据表,

字段 Field 就是列信息,

文档 Document 就是行信息。

【对比】

MySQL:select * from test.user where name = "张三";

ES:GET /test/user/_search?q=name:张三

1、配置 ES,启动 ES 实例

2、新建一个学生索引

3、不需要配置字段,ES 会自动识别

4、一个 JSON 代表一个学生,JSON 字符串中有学生属性字段 Field

MySQL
create table student(
	name varchar(20),
	sex char(2),
	age int
);

ES:
PUT student/_create/1
{
	"name":"张三",
	"sex":"male",
	"age":18
}

1.2、ES 为什么查询快

因为它采用倒排索引。

举例:

0、我在学校学习,学Java

1、我必须学 Java

2、学校教知识

学校 0、2

学习 0

学 Java 0、1

必须 1

教知识 2

我在学校学习,学Java --》我、在、学校、学习、学 Java

(0,3,100%) 0 章节命中了 3 次,100% 命中率

我必须在学校学Java --》我、必须、在、学校、学 Java

(0,2,66%)

(1,1,33%)

1.3、CRUD

1、添加数据

PUT class/_doc/1
{
  "name":"张三",
  "age":11
}

POST class/_doc
{
  "name":"王五",
  "age":11
}

2、查询数据

GET class/_doc/1
GET class/_search?q=name:李四
GET class/_search?q=name:(张三 OR 李四)
GET class/_search?q=name:(NOT 张三)
GET class/_search?q=age:<18
GET class/_search?q=age:(>=18 AND <=22)
GET class/_search?q=name:*三
GET class/_search
{
	"from":0,
	"size":2
}

3、修改数据

POST class/_update/1
{
	"doc":{
		"age":22
	}
}

4、删除数据

DELETE class/_doc/1

2、Spring Boot 整合 ES

引入依赖

xml 复制代码
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.78</version>
</dependency>

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

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

索引操作

java 复制代码
@Autowired
private RestHighLevelClient restHighLevelClient;

@Test
void contextLoads() throws Exception {
    CreateIndexRequest request = new CreateIndexRequest("test_index");
    CreateIndexResponse response = restHighLevelClient.indices()
            .create(request, RequestOptions.DEFAULT);
    System.out.println(response.index());
}

@Test
void getIndex() throws Exception {
    GetIndexRequest request = new GetIndexRequest("test_index");
    boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
    System.out.println(exists);
}

@Test
void deleteIndex() throws Exception {
    DeleteIndexRequest request = new DeleteIndexRequest("test_index");
    AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
    System.out.println(delete.isAcknowledged());
}
java 复制代码
@Test
void add() throws Exception{
    User user = new User(1, "张三");
    IndexRequest request = new IndexRequest("mytest");
    request.id("2");
    request.source(JSON.toJSONString(user), XContentType.JSON);
    IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
    System.out.println(response.toString());
    System.out.println(response.status());
}

@Test
void get() throws Exception{
    GetRequest request = new GetRequest("mytest","2");
    GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
    System.out.println(response.getSourceAsString());
    System.out.println(response.getSource());
}

@Test
void update() throws Exception{
    UpdateRequest request = new UpdateRequest("mytest","2");
    User user = new User(2, "李四");
    request.doc(JSON.toJSONString(user),XContentType.JSON);
    UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
    System.out.println(response.status());
}

@Test
void delete() throws Exception{
    DeleteRequest request = new DeleteRequest("mytest","2");
    DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
    System.out.println(response.status());
}

EsRepository

java 复制代码
package com.southwind.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;

@Data
@Document(indexName = "blog")
public class EsBlog {
    @Id
    private Integer id;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String title;
    private String author;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String content;
}
java 复制代码
package com.southwind.repository;

import com.southwind.entity.EsBlog;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface EsBlogRepository extends ElasticsearchRepository<EsBlog,Integer> {
}
相关推荐
.生产的驴1 小时前
Elasticsearch 文档批处理 混合处理 批量操作
大数据·后端·elasticsearch·搜索引擎·微信小程序·全文检索·jenkins
GZM8888884 小时前
Elasticsearch Serverless中的数据流自动分片深度解析
大数据·elasticsearch·serverless
.生产的驴5 小时前
Elasticsearch 操作文档对数据的增删改查操作 索引库文档 操作数据 CRUD
大数据·运维·后端·elasticsearch·搜索引擎·全文检索·jenkins
.生产的驴5 小时前
Elasticsearch 创建索引 Mapping映射属性 索引库操作 增删改查
大数据·spring boot·后端·elasticsearch·搜索引擎·spring cloud·全文检索
Elastic 中国社区官方博客6 小时前
Elasticsearch:减少 Elastic 容器镜像中的 CVE(常见的漏洞和暴露)
大数据·数据库·elasticsearch·搜索引擎·docker·云原生·全文检索
非凡的世界6 小时前
Elasticsearch分片数量是什么意思?
大数据·elasticsearch
非凡的世界11 小时前
Laravel操作ElasticSearch
elasticsearch·php·laravel
二十雨辰12 小时前
[微服务]分布式搜索--数据聚合
java·elasticsearch
杜杜的man13 小时前
git常用配置
大数据·git·elasticsearch
Elastic 中国社区官方博客14 小时前
Elasticsearch:Lucene 2024 年回顾
大数据·人工智能·后端·elasticsearch·搜索引擎·全文检索·lucene