SpringBoot系列之Elasticsearch极速入门与实际教程
@
一、什么Elasticsearch?
Elasticsearch是一款开源的分布式搜索引擎,基于 JSON 开发而来,具有 RESTful 风格,基于 Apache Lucene 的基础上开发而成的
引用官网的说法:
引用官网的说法,Elasticsearch的用途:
Elasticsearch 的用途是什么?
- 应用程序搜索
- 网站搜索
- 企业搜索
- 日志处理和分析
- 基础设施指标和容器监测
- 应用程序性能监测
- 地理空间数据分析和可视化
- 安全分析
- 业务分析
二、Elasticsearch安装部署
2.1 Elasticsearch安装环境准备
环境准备:
- elasticsearch7.2.0
- docker环境
相关工具软件:
- VM VisualBox
- xShell,Xftp
docker入门博客可以参考我的docker系统博客专栏:链接
2.2 Docker环境安装Elasticsearch
docker镜像搜索:
docker search elasticsearch
需要加上版本,不加版本默认是laster(最新)版本,貌似没提供laster版本
docker pull elasticsearch:7.2.0
查看所有镜像:
docker images
运行docker镜像:
- -p 隐射端口
- -e 设置参数,discovery.type=single-node,设置单节点,ES_JAVA_OPTS="-Xms256m -Xmx256m",设置JVM参数
- -d 后台运行
- --name 节点名称
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d --name ES01 elasticsearch:7.2.0
linux内用curl访问:
curl http://localhost:9200
浏览器直接访问也是可以的:http://your_ip_addr:9200
ps:详情可以参考官方文档:Install Elasticsearch with Docker
2.3 Elasticsearch目录结构介绍
目录 | 配置文件 | 描述 |
---|---|---|
bin | 脚本文件,包括启动 Elasticsearch、安装插件,运行统计数据等。 | |
config | elasticsearch.yml | 集群配置文件 |
JDK | Java 运行环境 | |
data | path.data | 数据文件 |
lib | Java 类库 | |
logs | path.logs | 日志文件 |
modules | 包含所有 ES 模块 | |
plugins | 包含所有已安装插件 |
ps:Elasticsearch也有linux版和window版,本博客不做介绍
2.4 Elasticsearch cat命令使用
cat 命令可以帮助开发者快速查询 Elasticsearch 的相关信息
- _cat 参数
_cat 参数可以查看支持的命令
[root@localhost ~]# curl localhost:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates
- ?v 参数
?v 参数,来显示详细的信息
[root@localhost ~]# curl localhost:9200/_cat/master?v
id host ip node
8x63m-D8Q2CP4xRbq7rEFA 172.17.0.2 172.17.0.2 7610b4e6e11b
其它常用命令:
- 查看所有插件:http://your_ip_addr:9200/_cat/plugins?v
- 查看所有索引:http://your_ip_addr:9200/_cat/indices?v
- 对ES进行健康检查:http://your_ip_addr:9200/_cat/health?v
- 查看当前的磁盘占用率:http://your_ip_addr:9200/_cat/allocation?v
help参数
help 参数,来输出可以显示的列
[root@localhost ~]# curl localhost:9200/_cat/master?help
id | | node id
host | h | host name
ip | | ip address
node | n | node name
- h参数
h 参数,可以指定输出的字段
[root@localhost ~]# curl localhost:9200/_cat/master?h=host,ip,node
172.17.0.2 172.17.0.2 7610b4e6e11b
三、Elasticsearch基本概念
3.1 索引(Index)
ElasticSearch把数据存放到一个或者多个索引(indices)中。如果用关系型数据库模型对比,索引(index)的地位与数据库实例(database)相当,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。
3.2 文档类型(Type)
如果一个索引(index)有多个文档的情况,可以根据类型(type)进行归类,如果用关系型数据库模型对比,索引(index)的地位与数据表(table)相当。文档类型使得同一个索引中在存储结构不同文档时,只需要依据文档类型就可以找到对应的参数映射(Mapping)信息
3.3 文档(Document)
文档(Document)由一个或者多个域(Field)组成,每个域(Field)由一个域名(此域名非彼域名)和一个或者多个值组成(有多个值的值称为多值域(multi-valued))
3.4 属性/域(Field)
如果用关系型数据库模型对比,域(Field)的地位与数据库模型中的列(column)相当
3.5 节点(Node)
每台服务器可以运行多个 Elastic 实例,单独一个ElasticSearch服务器实例称为一个节点
3.6 集群(Cluster)
集群是多个ElasticSearch节点的集合,Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
3.7 分片索引(Shard)
集群能够存储超出单机容量的信息。为了实现这种需求,ElasticSearch把数据分发到多个存储Lucene索引的物理机上。这些Lucene索引称为分片索引,这个分发的过程称为索引分片(Sharding)。在ElasticSearch集群中,索引分片(Sharding)是自动完成的,而且所有分片索引(Shard)是作为一个整体呈现给用户的
3.8 索引副本(Replica)
索引副本(Replica)机制的的思路很简单:为索引分片创建一份新的拷贝,它可以像原来的主分片一样处理用户搜索请求
3.9 网关(Gateway)
在运行的过程中,ElasticSearch会收集集群的状态、索引的参数等信息。这些数据被存储在Gateway中。
下面用一张表格简单记录对比:
Elasticsearch | 关系数据库 |
---|---|
索引 (Index) | 数据库(Database) |
类型(Type) | 数据表(Table) |
文档(Document) | 表中记录/数据行(Row) |
域(Field) | 数据列(Column) |
参数映射(Mapping) | 模式(Schema) |
一个 ElasticSearch 集群可以 包含多个 索引 ,相应的每个索引可以包含多
个 类型 。 这些不同的类型存储着多个 文档 ,每个文档又有 多个域
四、Elasticsearch基本使用
4.1 RESTFul API
Elasticsearch是支持RESTFul API格式的,所以先补充一些RESTFul API知识:
GET 请求:获取服务器中的对象
- 相当于SQL的Select命令
- GET /emps:列出所有员工信息
POST 请求:在服务器上更新对象
- 相当于SQL的Update命令
- POST /emps/ID:更新指定的员工信息
PUT 请求:在服务器上创建对象
- 相当于SQL的Create命令
- PUT /emps/ID:新建一个员工信息
DELETE 请求:删除服务器中的对象
- 相当于SQL的Delete命令
- DELETE /blogs/ID:删除指定的博客
HEAD 请求:仅仅用于获取对象的基础信息
4.2 查询所有索引
查询所有的索引:
curl -X GET 'http://localhost:9200/_cat/indices?v'
ok,进行索引实践,建议以官网对应版本文档为准,本博客参考7.2版本的,链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.2/docs.html
4.3 Elastic索引创建
- PUT,创建索引:
[root@localhost ~]# curl -H "Content-Type:application/json" -X PUT localhost:9200/company/employees/1 -d '{"id" :1,"name":"admin","password":"123"}'
返回json:
{
"_index":"company",
"_type":"employees",
"_id":"1",
"_version":1,
"result":"created",
"_shards":{
"total":2,
"successful":1,
"failed":0
},
"_seq_no":0,
"_primary_term":1
}
4.4 Elastic索引查询
- GET,查询索引:
[root@localhost ~]# curl -X GET localhost:9200/company/employees/1?pretty=true
{
"_index" : "company",
"_type" : "employees",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"id":1,
"name":"admin",
"password":"123"
}
}
4.5 Elastic索引删除
- DELETE,删除索引:
[root@localhost ~]# curl -X DELETE localhost:9200/company/employees/1
{
"_index":"company",
"_type":"employees",
"_id":"1",
"_version":2,
"result":"deleted",
"_shards":{
"total":2,
"successful":1,
"failed":0
},
"_seq_no":1,
"_primary_term":1
}
4.6 Elastic索引更新
- POST,更新索引:
curl -H "Content-Type:application/json" -X POST localhost:9200/company/employees/1 -d '{"id" :1,"name":"admin","password":"111"}'
{
"_index":"company",
"_type":"employees",
"_id":"1",
"_version":2,
"result":"updated",
"_shards":{
"total":2,
"successful":1,
"failed":0
},
"_seq_no":3,
"_primary_term":1
}
五、Spring Data Elasticsearch
5.1 开发环境准备
实验环境:
- SpringBoot2.2.1
- Elasticsearch7.2.0
maven配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.springboot</groupId>
<artifactId>springboot-elasticsearch</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-elasticsearch</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2.1版本,只要指定uris,旧版本要配置cluster-nodes和cluster-name
spring:
elasticsearch:
rest:
uris: 192.168.7.96:9200
5.2 @Document使用
指定index和type
package com.example.springboot.elasticsearch.bean;
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;
import java.io.Serializable;
/**
* <pre>
* Employee
* </pre>
*
* <pre>
* @author mazq
* 修改记录
* 修改后版本: 修改人: 修改日期: 2020/07/16 17:02 修改内容:
* </pre>
*/
@Data
@Document(indexName = "company",type = "employees",shards = 5,replicas = 1)
public class Employee implements Serializable {
@Id
private Long id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Text)
private String password;
@Override
public String toString() {
return "Employee{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
5.3 ElasticsearchRepository
实现ElasticsearchRepository
package com.example.springboot.elasticsearch.repository;
import com.example.springboot.elasticsearch.bean.Employee;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
/**
* <pre>
* EmployeeRepository
* </pre>
*
* <pre>
* @author mazq
* 修改记录
* 修改后版本: 修改人: 修改日期: 2020/07/16 17:24 修改内容:
* </pre>
*/
@Repository
public interface EmployeeRepository extends ElasticsearchRepository<Employee,Long>{
}
5.4 Junit 测试Elasticsearch
新增索引:
@Autowired
EmployeeRepository employeeRepository;
@Test
void createIndex(){
Employee employee = new Employee();
employee.setId(2L);
employee.setName("sys");
employee.setPassword("123");
employeeRepository.save(employee);
}
查询索引:
@Autowired
EmployeeRepository employeeRepository;
@Test
void selectIndex(){
Optional<Employee> employee = employeeRepository.findById(2L);
System.out.println(employee.get().toString());
}
代码例子下载:code download
- 附录 优质博客:
全文搜索引擎 Elasticsearch 入门教程
SpringBoot系列之Elasticsearch极速入门与实际教程的更多相关文章
- SpringBoot系列(二)入门知识
SpringBoot系列(二)入门知识 往期推荐 SpringBoot系列(一)idea新建springboot项目 引言 本来新建springboot项目应该放在入门知识这一章的,但是由于新建spr ...
- ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程
前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...
- ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解
前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...
- Spring Security系列之极速入门与实践教程
@ 目录 1. Spring Security 2. 实验环境准备 3. 日志级别修改 4. 配置用户名/密码 5. 数据库方式校验 6. 不拦截静态资源 7. 自定义登录页面 8. Remember ...
- CAS单点登录系列之极速入门于实战教程(4.2.7)
@ 目录 一. SSO简介 1.1 单点登录定义 1.2 单点登录角色 1.3 单点登录分类 二. CAS简介 2.1 CAS简单定义 2.2 CAS体系结构 2.3 CAS原理 三.CAS服务端搭建 ...
- SPRING-BOOT系列之Spring4快速入门
上节 : spring boot简介 接着上章节的spring boot简介,我们会发现boot是基于spring的,其中最重要的就是spring容器了.那么本章着重介绍spring容器装配自定义be ...
- ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程
前言 本文主要介绍的是ElasticSearch集群和kinaba的安装教程. ElasticSearch介绍 ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行 ...
- SpringBoot系列之从入门到精通系列教程
对应SpringBoot系列博客专栏,例子代码,本博客不定时更新 Spring框架:作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多, ...
- ElasticSearch实战系列六: Logstash快速入门和实战
前言 本文主要介绍的是ELK日志系统中的Logstash快速入门和实战 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...
随机推荐
- 工欲善其事,必先利其器 -- Mac 软件推荐(序)
背景 工欲善其事,必先利其器.后面我将陆陆续续推荐一些软件利器帮助大家提高效率(主要针对 Mac 电脑). 如果你在使用 Mac 电脑,并且没有如某些人那样安装并使用 Windows 系统,那么你可 ...
- 详说tcp粘包和半包
tcp服务端和客户端建立连接后会长时间维持这个连接,用于互相传递数据,tcp是以流的方式传输数据的,就像一个水管里的水一样,从一头不断的流向另一头. 理想情况下,发送的数据包都是独立的, 现实要复杂一 ...
- Beta阶段代码与规范
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta冲刺 这个作业的目标 团队进行Beta冲刺--代码规范与计划 作业正文 如下 其他参考文献 ... ...
- 009.OpenShift管理及监控
一 资源限制 1.1 pod资源限制 pod可以包括资源请求和资源限制: 资源请求 用于调度,并控制pod不能在计算资源少于指定数量的情况下运行.调度程序试图找到一个具有足够计算资源的节点来满足pod ...
- C# 人脸识别库
.NET 人脸识别库 ViewFaceCore 这是基于 SeetaFace6 人脸识别开发的 .NET 平台下的人脸识别库这是一个使用超简单的人脸识别库这是一个基于 .NET Standard 2. ...
- robot framework使用小结(二)
robot framework关键字驱动采用分层,结合Template做成数据驱动 我个人觉得不管是关键字驱动还是数据驱动,都是基于模块(或者是函数)的概念 新建测试案例baidu02,添加Libra ...
- 如何用Tesseract做日文OCR(c#实现)
首先做一下背景介绍,Tesseract是一个开源的OCR组件,主要针对的是打印体的文字识别,对手写的文字识别能力较差,支持多国语言(中文.英文.日文.韩文等).是开源世界里最强的一款OCR组件.当然和 ...
- Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端
要搞一个小型的cms内容发布系统 因为小程序上线之后,直接对数据库进行操作的话,慧出问题的,所以一般都会做一个管理系统,让工作人员通过这个管理系统来对这个数据库进行增删改查 微信小程序其实给我们提供了 ...
- js事件入门(6)
7.事件冒泡机制 7.1.什么是事件冒泡 当一个元素接收到一个事件以后,会将事件传播给它的父级元素,它的负级元素会一层一层往上传播,直到最顶层window,这种事件传播机制叫作事件冒泡. <!D ...
- 如何嵌套一个网页html到另一个html中
在常规网页开发中(单页应用除外哈),经常会遇到把一些通用内容的页面集中到一个页面中,需要使用这些页面只需要包含引入即可,这样有利于维护和修改,当通用页面修改时只需更改一个文件就可以了,不需要每个文件单 ...