@[toc]
松哥前段时间连载的 Spring Security 基本上告一段落了,接下来我会抽空将这个系列的教程整顿成一个系列分发给大家。最近一段时间本人也略微劳动了一下,不写教程的日子尽管能够早早睡觉然而又会感到无聊,得找点事件做,感觉是时候开启一波新的旅程了~
2018 年国庆节期间 ElasticSearch 母公司上市,那个时候我就想写一个 es 教程,惋惜起初烂尾了,这事在我心里老是一个疙瘩。最近刚好有一个工夫空档,就想着能不能把这个系列给完结了。
不同于之前的教程,这次的教程我打算出一个视频版 + 图文混合版的。视频为主,图文为辅。视频我会上传到百度网盘,文末会有文章对应的视频下载链接。
ElasticSearch 目前也算是十分火了,站内搜索、日志剖析都会用到它,而且还能够间接当成 NoSQL 数据库来应用。
接下来,咱们就通过上面这个简略介绍,开启 es 之旅吧~
松哥针对本文内容录制了一个视频,如下:
视频下载链接:https://pan.baidu.com/s/1bIvt… 提取码: pm94
1.Lucene
Lucene 是一个开源、收费、高性能、纯 Java 编写的全文检索引擎,能够算作是开源畛域最好的全文检索工具包。
在理论开发中,Lucene 简直实用于任何须要全文检索的场景,所以 Lucene 先后倒退出好多语言版本,例如 C++、C#、Python 等。
早在 2005 年,Lucene 就降级为 Apache 顶级开源我的项目。它的作者是 Doug Cutting,有的人可能没听过这这个人,不过你必定听过他的另一个赫赫有名的作品 Hadoop。
不过须要留神的是,Lucene 只是一个工具包,并非一个残缺的搜索引擎,开发者能够基于 Lucene 来开发残缺的搜索引擎。比拟驰名的有 Solr、ElasticSearch,不过在分布式和大数据环境下,ElasticSearch 更胜一筹。
Lucene 次要有如下特点:
- 简略
- 跨语言
- 弱小的搜索引擎
- 索引速度快
- 索引文件兼容不同平台
2.ElasticSearch
ElasticSearch 是一个分布式、可扩大、近实时性的高性能搜寻与数据分析引擎。ElasticSearch 基于 Java 编写,通过进一步封装 Lucene,将搜寻的复杂性屏蔽起来,开发者只须要一套简略的 RESTful API 就能够操作全文检索。
ElasticSearch 在分布式环境下体现优异,这也是它比拟受欢迎的起因之一。它反对 PB 级别的结构化或非结构化海量数据处理
整体上来说,ElasticSearch 有三大性能:
- 数据收集
- 数据分析
- 数据存储
ElasticSearch 的次要特点:
- 分布式文件存储。
- 实时剖析的分布式搜索引擎。
- 高可拓展性。
- 可插拔的插件反对。
3. 装置
3.1 单节点装置
首先关上 Es 官网,找到 Elasticsearch:
- https://www.elastic.co/cn/ela…
而后点击下载按钮,抉择适合的版本间接下载即可。
将下载的文件解压,解压后的目录含意如下:
目录 | 含意 |
---|---|
modules | 依赖模块目录 |
lib | 第三方依赖库 |
logs | 输入日志目录 |
plugins | 插件目录 |
bin | 可执行文件目录 |
config | 配置文件目录 |
data | 数据存储目录 |
启动形式:
进入到 bin 目录下,间接执行 ./elasticsearch 启动即可。
看到 started 示意启动胜利。
默认监听的端口是 9200,所以浏览器间接输出 localhost:9200 能够查看节点信息。
节点的名字以及集群(默认是 elasticsearch)的名字,咱们都能够自定义配置。
关上 config/elasticsearch.yml 文件,能够配置集群名称以及节点名称。配置形式如下:
cluster.name: javaboy-es
node.name: master
配置实现后,保留配置文件,并重启 es。重启胜利后,刷新浏览器 localhost:9200 页面,就能够看到最新信息。
Es 反对矩阵:
- https://www.elastic.co/cn/sup…
3.2 HEAD 插件装置
Elasticsearch-head 插件,能够通过可视化的形式查看集群信息。
这里介绍两种装置思路。
3.2.1 浏览器插件装置
Chrome 间接在 App Store 搜寻 Elasticsearch-head,点击装置即可。
公众号 江南一点雨 后盾回复 Elasticsearch-head,能够下载离线安装包。
3.2.2 下载插件装置
四个步骤
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
启动胜利,页面如下:
留神,此时看不到集群数据。起因在于这里通过跨域的形式申请集群数据的,默认状况下,集群不反对跨域,所以这里就看不到集群数据。
解决办法如下,批改 es 的 config/elasticsearch.yml 配置文件,增加如下内容,使之反对跨域:
http.cors.enabled: true
http.cors.allow-origin: "*"
配置实现后,重启 es,此时 head 上就有数据了。
3.3 分布式装置
假如:
- 一主二从
- master 的端口是 9200,slave 端口别离是 9201 和 9202
首先批改 master 的 config/elasticsearch.yml 配置文件:
node.master: true
network.host: 127.0.0.1
配置实现后,重启 master。
将 es 的压缩包解压两份,别离命名为 slave01 和 slave02,代表两个从机。
别离对其进行配置。
slave01/config/elasticsearch.yml:
# 集群名称必须保持一致
cluster.name: javaboy-es
node.name: slave01
network.host: 127.0.0.1
http.port: 9201
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
slave02/config/elasticsearch.yml:
# 集群名称必须保持一致
cluster.name: javaboy-es
node.name: slave02
network.host: 127.0.0.1
http.port: 9202
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
而后别离启动 slave01 和 slave02。启动后,能够在 head 插件上查看集群信息。
3.4 Kibana 装置
Kibana 是一个 Elastic 公司推出的一个针对 es 的剖析以及数据可视化平台,能够搜寻、查看寄存在 es 中的数据。
装置步骤如下:
- 下载 Kibana:https://www.elastic.co/cn/dow…
- 解压
- 配置 es 的地址信息(可选,如果 es 是默认地址以及端口,能够不必配置,具体的配置文件是 config/kibana.yml)
- 执行 ./bin/kibana 文件启动
- localhost:5601
Kibana 装置好之后,首次关上时,能够抉择初始化 es 提供的测试数据,也能够不应用。
4.ElasticSearch 外围概念介绍
4.1 ElasticSearch 十大外围概念
4.1.1 集群(Cluster)
一个或者多个装置了 es 节点的服务器组织在一起,就是集群,这些节点独特持有数据,独特提供搜寻服务。
一个集群有一个名字,这个名字是集群的惟一标识,该名字成为 cluster name,默认的集群名称是 elasticsearch,具备雷同名称的节点才会组成一个集群。
能够在 config/elasticsearch.yml 文件中配置集群名称:
cluster.name: javaboy-es
在集群中,节点的状态有三种:绿色、黄色、红色:
- 绿色:节点运行状态为衰弱状态。所有的主分片、正本分片都能够失常工作。
- 黄色:示意节点的运行状态为正告状态,所有的主分片目前都能够间接运行,然而至多有一个正本分片是不能失常工作的。
- 红色:示意集群无奈失常工作。
4.1.2 节点(Node)
集群中的一个服务器就是一个节点,节点中会存储数据,同时参加集群的索引以及搜寻性能。一个节点想要退出一个集群,只须要配置一下集群名称即可。默认状况下,如果咱们启动了多个节点,多个节点还可能相互发现彼此,那么它们会主动组成一个集群,这是 es 默认提供的,然而这种形式并不牢靠,有可能会产生脑裂景象。所以在理论应用中,倡议肯定手动配置一下集群信息。
4.1.3 索引(Index)
索引能够从两方面来了解:
名词
具备类似特色文档的汇合。
动词
索引数据以及对数据进行索引操作。
4.1.4 类型(Type)
类型是索引上的逻辑分类或者分区。在 es6 之前,一个索引中能够有多个类型,从 es7 开始,一个索引中,只能有一个类型。在 es6.x 中,仍然放弃了兼容,仍然反对单 index 多个 type 构造,然而曾经不倡议这么应用。
4.1.5 文档(Document)
一个能够被索引的数据单元。例如一个用户的文档、一个产品的文档等等。文档都是 JSON 格局的。
4.1.6 分片(Shards)
索引都是存储在节点上的,然而受限于节点的空间大小以及数据处理能力,单个节点的解决成果可能不现实,此时咱们能够对索引进行分片。当咱们创立一个索引的时候,就须要指定分片的数量。每个分片自身也是一个功能完善并且独立的索引。
默认状况下,一个索引会主动创立 1 个分片,并且为每一个分片创立一个正本。
4.1.7 正本(Replicas)
正本也就是备份,是对主分片的一个备份。
4.1.8 Settings
集群中对索引的定义信息,例如索引的分片数、正本数等等。
4.1.9 Mapping
Mapping 保留了定义索引字段的存储类型、分词形式、是否存储等信息。
4.1.10 Analyzer
字段分词形式的定义。
4.2 ElasticSearch Vs 关系型数据库
关系型数据库 | ElasticSearch |
---|---|
数据库 | 索引 |
表 | 类型 |
行 | 文档 |
列 | 字段 |
表构造 | 映射(Mapping) |
SQL | DSL(Domain Specific Language) |
Select * from xxx | GET http:// |
update xxx set xx=xxx | PUT http:// |
Delete xxx | DELETE http:// |
索引 | 全文索引 |
这篇文章其实是松哥所录制的 Es 视频教程的笔记,笔记绝对简陋一些,小伙伴们也能够参考视频,视频下载链接:https://pan.baidu.com/s/1bIvt… 提取码: pm94