超全!阿里P7架构师分享的ElasticSearch图文总结,加薪全靠它!

245 阅读6分钟

Hello,今天给给各位童鞋分享的是ElasticSearch,赶紧拿出小本子记下来吧

image.png Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。Elasticsearch是java开发的,在7.8版本以上,需要使用jdk1.8以上版本。

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将Elasticsearch里存储文档数据与关系型数据库mysql存储数据的概念进行类比

image.png ES里的Index可以看做一个库,而type相当于表,Documents相当于行。

这里type的概念逐渐被弱化,Elasticsearch 6.x中,一个index下只能包含一个type,Elasticsearch 7.x中,type的概念已经被删除了。

1.安装Elasticsearch,从官网下载windwins版本的包,解压开箱即用

image.png 目录说明

bin:程序启动的bat文件

config:配置信息

data:存放数据

jdk:自带的jdk

lib:需要的jar包

logs:日志文件

modules:功能模块

plugins:扩展功能包

image.png 点击bin目录下的elasticsearch.bat文件,启动elasticsearch项目,默认系统访问端口9200

image.png 使用http://127.0.0.1:9200/访问,看到以下页面,说明启动成功

image.png 2.使用javaApi连接es

(1)新建maven项目后,pom.xml导入需要的包

image.png (2)使用RestHighLevelClient创建客户端连接测试

public class EsClientTest {

@Test

public void testConneEs() throws IOException {

    //1.创建es客户端

    RestHighLevelClient restHighLevelClient = new RestHighLevelClient(

            RestClient.builder(new HttpHost("localhost",9200,"http"))

    );



    //2.关闭连接

    restHighLevelClient.close();

}

}

3.创建索引

image.png

image.png 4.获取索引记录

image.png 控制台获取情况

image.png 5.删除索引

image.png 6.向索引中添加doc

image.png 使用postman查看当前添加的doc文档情况

image.png 7.更新doc的某个值

image.png name字段值有张三更新为李四

image.png 8.查询doc文档

@Test

public void docSelect() throws IOException {

    //1.创建es客户端连接

    RestHighLevelClient restHighLevelClient = new RestHighLevelClient(

         RestClient.builder(new HttpHost("localhost",9200,"http"))

    );



    //2.创建查询doc数据

    GetRequest getRequest = new GetRequest();

    getRequest.index("user").id("1001");



    //3.执行查询

    GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);



    System.out.println(documentFields.getSourceAsString());

    //4.关闭资源

    restHighLevelClient.close();



}

控制台输出结果

image.png 9.删除doc文档

控制台执行结果

image.png 使用postman查询记录-已经删除成功

image.png 10.批量添加doc

image.png 使用postman查看user索引下的所有文档

image.png 11.批量删除doc

image.png 使用postman查看索引下的文档

image.png 12.批量更新doc

image.png postman中查看索引下的文档

image.png 13.使用query查询索引下的所有doc

image.png 控制台打印消息

image.png 14.使用query带条件查询某个索引下的doc

image.png 15.使用query带分页查询某个索引下的doc

image.png 16.使用query带排序查询某个索引下的doc

image.png 17.使用query查询某个索引下的doc-查询某些字段

image.png 18.使用query查询某个索引下的doc-组合条件查询(and的关系)

image.png 19.使用query查询某个索引下的doc-组合条件查询(or的关系)

image.png 20.使用query查询某个索引下的doc-按范围查询

image.png 21.使用query查询某个索引下的doc-模糊查询

image.png 22.使用query查询某个索引下的doc-高亮显示某个字段

image.png 23.使用query查询某个索引下的doc-聚合查询(某个字段最大最小)

image.png 24.使用query查询某个索引下的doc-分组查询

image.png 25.集群部署elasticsearch简介

背景:单台elasticsearch提供服务,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用,所以生成环境中,一般都是运行在指定服务器集群中。

集群cluster:一个集群就是由一个或者多个服务器节点组织在一起,共同持有整个数据,并一起提供索引和搜索服务。一个Elasticsearch集群有一个唯一的名字标识,整个名字默认就是elasticsearch。整个名字很重要,因为一个节点只能通过指定某个集群的名字来加入集群。

节点Node:集群中包含很多的服务器,一个节点就是其中的一个服务器。作为集群的一部分,它存储数据,参与集群的索引和搜索功能。一个节点也是由一个表示来决定的,一个节点可以通过配置集群名称的方式来加入一个指定的集群

26.windows环境下elasticsearch集群部署

(1)创建一个elasticsearch-cluster的文件件,把elasticsearch服务文件拷贝三份进去,删除data和logs目录下的文件,分别命名为node-1001、node-1002、node-1003,作为三个节点服务

image.png (2)修改集群文件目录中每个节点的config/elasticsearch.yml文件

node-1001节点配置

#集群名称,节点之间要保持一致

cluster.name: my-application

#节点名称,集群内要保持唯一

node.name: node-1001

#可以作为master节点

node.master: true

#存储数据

node.data: true

#ip地址

network.host: localhost

#http端口

http.port: 1001

#tcp监听端口,节点之间内部通信使用

transport.tcp.port: 9301

#节点之间相互通信的主机地址

#discovery.seed_hosts: ["host1", "host2"]

#discovery.zen.fd.ping_timeout:1m

#discovery.zen.fd.ping_retries:5

#跨域配置

http.cors.enabled: true

http.cors.allow-origin: "*"

此时从bin/elasticsearch.bat启动node-1001,控制服务台打印出节点名称、集群名称

image.png 使用postman查看节点的启动状态(启动)和节点数(1个)

image.png node-1002节点配置

#集群名称,节点之间要保持一致

cluster.name: my-application

#节点名称,集群内要保持唯一

node.name: node-1002

#可以作为master节点

node.master: true

#存储数据

node.data: true

#ip地址

network.host: localhost

#http端口

http.port: 1002

#tcp监听端口,节点之间内部通信使用

transport.tcp.port: 9302

#节点之间相互通信的主机地址-查找主节点

discovery.seed_hosts: ["localhost:9301"]

#执行查找ping命令的超时时间

discovery.zen.fd.ping_timeout: 1m

discovery.zen.fd.ping_retries: 5

#跨域配置

http.cors.enabled: true

http.cors.allow-origin: "*"

此时从bin/elasticsearch.bat启动node-1002,控制服务台打印出节点名称、集群名称

image.png 使用postman查看节点的启动状态(启动)和节点数(2个)

image.png node-1003节点配置

#集群名称,节点之间要保持一致

cluster.name: my-application

#节点名称,集群内要保持唯一

node.name: node-1003

#可以作为master节点

node.master: true

#存储数据

node.data: true

#ip地址

network.host: localhost

#http端口

http.port: 1003

#tcp监听端口,节点之间内部通信使用

transport.tcp.port: 9303

#节点之间相互通信的主机地址-查找主节点

discovery.seed_hosts: ["localhost:9301","localhost:9302"]

#执行查找ping命令的超时时间

discovery.zen.fd.ping_timeout: 1m

discovery.zen.fd.ping_retries: 5

#跨域配置

http.cors.enabled: true

http.cors.allow-origin: "*"

 此时从bin/elasticsearch.bat启动node-1003,控制服务台打印出节点名称、集群名称

image.png 使用postman查看节点的启动状态(启动)和节点数(3个)

image.png 好啦,今天的文章就到这里,希望能帮助到屏幕前迷茫的你们