学习笔记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 小时前
linux安装单节点Elasticsearch(es),安装可视化工具kibana
linux·elasticsearch·jenkins
jack xu12 小时前
高频面试题:如何保证数据库和es数据一致性
java·大数据·数据库·mysql·elasticsearch
Debug_TheWorld5 小时前
Elasticsearch学习
elasticsearch
island13145 小时前
【git#4】分支管理 -- 知识补充
大数据·git·elasticsearch
二爷记12 小时前
QXQ3真i9级CPU是捡漏还是踩坑!i9-12900 ES版CPU值得入手吗?
大数据·elasticsearch·搜索引擎·全文检索
Hello.Reader13 小时前
在 Ubuntu 环境为 Elasticsearch 引入 `icu_tokenizer
ubuntu·elasticsearch·jenkins
jack_xu1 天前
高频面试题:如何保证数据库和es数据一致性
后端·mysql·elasticsearch
技术项目引流1 天前
elasticsearch查询中的特殊字符影响分析
大数据·elasticsearch·搜索引擎
yangmf20401 天前
使用 Logstash 迁移 MongoDB 数据到 Easysearch
java·elasticsearch·搜索引擎
南客先生1 天前
海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成
java·clickhouse·elasticsearch·flink·springcloud·shardingjdbc