@

一、什么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

SpringBoot系列之Elasticsearch极速入门与实际教程的更多相关文章

  1. SpringBoot系列(二)入门知识

    SpringBoot系列(二)入门知识 往期推荐 SpringBoot系列(一)idea新建springboot项目 引言 本来新建springboot项目应该放在入门知识这一章的,但是由于新建spr ...

  2. ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程

    前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...

  3. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  4. Spring Security系列之极速入门与实践教程

    @ 目录 1. Spring Security 2. 实验环境准备 3. 日志级别修改 4. 配置用户名/密码 5. 数据库方式校验 6. 不拦截静态资源 7. 自定义登录页面 8. Remember ...

  5. CAS单点登录系列之极速入门于实战教程(4.2.7)

    @ 目录 一. SSO简介 1.1 单点登录定义 1.2 单点登录角色 1.3 单点登录分类 二. CAS简介 2.1 CAS简单定义 2.2 CAS体系结构 2.3 CAS原理 三.CAS服务端搭建 ...

  6. SPRING-BOOT系列之Spring4快速入门

    上节 : spring boot简介 接着上章节的spring boot简介,我们会发现boot是基于spring的,其中最重要的就是spring容器了.那么本章着重介绍spring容器装配自定义be ...

  7. ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程

    前言 本文主要介绍的是ElasticSearch集群和kinaba的安装教程. ElasticSearch介绍 ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行 ...

  8. SpringBoot系列之从入门到精通系列教程

    对应SpringBoot系列博客专栏,例子代码,本博客不定时更新 Spring框架:作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多, ...

  9. ElasticSearch实战系列六: Logstash快速入门和实战

    前言 本文主要介绍的是ELK日志系统中的Logstash快速入门和实战 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

随机推荐

  1. docker-mcr 助您全速下载 dotnet 镜像

    2018 年五月之后,微软将后续发布的所有 docker image 都推送到了 MCR (Miscrosoft Container Registry),但在中国大陆,它的速度实在是令人发指,本文将介 ...

  2. S7-200 PLC内部+5VDC电源的负载能力

    S7-200 PLC内部+5VDC电源的负载能力 S7-200 CPU模块提供DC5V和24V电源:当有扩展模块时,CPU通过I/O总线为其提供5V电源,所有扩展模块的SV电源消耗之和不能超过该CPU ...

  3. 多语言工作者の十日冲刺<5/10>

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第五天(05.04) 作业正文 ...

  4. 升级OPENSSH踩过的坑

    安装三个必要依赖包yum install gcc zlib-devel openssl-devel上传安装包,创建一个/tmp目录下,然后解压,将/etc/ssh/目录移动到本地解压安装包,进入安装目 ...

  5. ES6 基本语法:

    ES6.基本语法* ES6可以使用=>作为函数表达形式,简单的风格: 参数 + => +函数体;* 在JS中是以var定义一个变量 ,在ES6中是以let定义变量; let 和 var 区 ...

  6. Spring Boot项目使用Swagger2文档教程

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 前言 Sprin ...

  7. 八张图彻底了解JDK8 GC调优秘籍-附PDF下载

    目录 简介 分代垃圾回收器的内存结构 JDK8中可用的GC 打印GC信息 内存调整参数 Thread配置 通用GC参数 CMS GC G1参数 总结 简介 JVM的参数有很多很多,根据我的统计JDK8 ...

  8. 深度解剖dubbo源码---01dubbo的架构原理-探索.mp4

    02内核解剖-dubbo自己的SPI实现.mp4 https://blog.csdn.net/prestigeding/article/details/80795708 https://segment ...

  9. TestNG配合catubuter统计单元测试的代码覆盖率

    build-testNG.xml对应的ant脚本为 <?xml version="1.0" encoding="UTF-8"?> <proje ...

  10. SSH网上商城一

    Java高级项目之SSH网上商城项目实战: 1.采用目前最主流的三大框架开发即Struts2+Spring+Hibernate框架整合开发.2.通过AJAX技术提供良好的用户体验.3.提供了邮箱激活的 ...