Elasticsearch 简称ES,是一个分布式全文检索引擎。
比如github的代码检索就是用了ES,百度也有用ES。
由于Lucene的api相对比较复杂,所以ES其实是对Lucene的封装简化,并且提供了一套比较简单的api文档。
es官网
主要是海量数据检索,关键词:海量。因为只有数据量大了才能体现ES的优势。
以下是我能想到的或者是之前有遇到过的场景:
elasticsearch:提供日志的分布式存储和全文检索
Logstash:传输日志
kibana:前端展示
比如让你做一个类似于微博的后台服务,光检索这块,就可以考虑ES
如果你的项目,正在使用关系型数据库,有以下特点,就可以考虑用ES作一层缓存
举个例子,比如电商网站的,针对审核人员,客服人员专用的查询订单的接口
这类接口要求查询快,而且可查历史所有上亿级别的订单,而且不一定是一定根据订单号查,可能查询条件很多,有类似模糊匹配。那只用关系型数据库,怕是得好好下功夫了,但如果使用ES,那就非常简单了。
支持横向扩展
支持很多插件
其实说全文检索的核心优点,应该是要说Lucene的,所以如果要深挖,建议先学Lucene,比如lucene的数据和索引分离存储等,硬说成是ES的优点那也行。
总而言之,ES如果是一辆跑车,那Lucene就是引擎,就是核心。ES只不过是让这个引擎物有所用,真正被利用起来而已。
github以前是用solr作全文检索的,后来换成了ES
基本上标志着ES把solr给超越了
后来很少听人说项目中还用Solr的,基本都是ES了
首先es版本有1.x,2.x,5.x,6.x,7.x
使用最新的,尽量避免使用5.x之前的
https://www.elastic.co/cn/downloads/elasticsearch
进入es官网下载,安装(需要有jdk环境,eg:1.8)
页面访问 localhost:9100
下载:https://github.com/mobz/elasticsearch-head
需要有node环境,eg:8.2
npm install 安装
npm run start 启动
还有其他可视化插件,基本上都是下载安装,配置url就能用,请自行搜索吧
es的config/elasticsearch.yml文件下
文件末尾加以下内容
http.cors.enable: true
http.cors.allow-origin: "*"
分别启动es和head
页面访问 localhost:9100
1个master节点+2个slave节点
1、master节点配置
es的config/elasticsearch.yml文件下
文件末尾加以下内容,代表当前这个服务是master节点
# 集群名字
cluster.na zhangsan
# 节点名字为master
node.name: master
# 指定当前节点为master
node.master: true
# 绑定本地ip
network.host: 127.0.0.1
启动master
2、slave节点配置
复制安装包信息,作为slave
es的config/elasticsearch.yml文件下
文件末尾加以下内容,代表当前这个服务是slave节点
# 集群名字,这个必须和master节点的集群名字一致
cluster.na zhangsan
# 节点名字为slave01,多个节点就slave02,slave03...
node.name: slave01
# 绑定本地ip
network.host: 127.0.0.1
# 配置slave的端口,es默认端口是9200,我们让master是默认的9200
http.port: 9201
# 配置这个,为了能找到master
dicxovery.zen.ping.unicast.host: ["127.0.0.1"]
启动slave01,slave02
含有相同属性的文档集合
相当于mysql的数据库
索引可以定义一个或多个类型,文档必须属于一个类型
相当于mysql的表,数据库里可以有一个或多个表,一行记录必须属于一个表
文档是可以被索引的基本数据单位
相当于mysql的一行记录
每个索引都有多个分片,每个分片都是一个lucene索引
es在创建索引时默认创建5个分片
分片数量必须在创建索引时指定,后面不能修改
相当于mysql的数据分片
copy一份分片就完成了分片的备份
es在创建索引时默认创建1个备份
备份可以后期修改
相当于mysql的数据备份
es是提供了一套restful api接口
spring-boot集成,也是通过代码,去构建各个接口的参数再执行的。
还有安装分词器之类的,这其实都是lucene的知识点了。
照着网上的教程,可以很快的搭起一套ES的服务,与项目的集成使用也不是很难。
难点在于要搞清楚为什么ES可以做全文检索,其实还是绕不开Lucene,学习Lucene索引才是重中之重。
对于应用来说,重点在于要知道ES能做什么,擅长做什么,什么时候用。
我总结了:就是海量数据的全文检索。