现在工作中使用到了ES(ElasticSearch),既忧愁又兴奋,忧愁的是凡是涉及到ES的需求处理不了,兴奋的是终于又要掌握一门技术了,所以开始学习。
为什么要用ES
网上的概念一大堆,就说说自己目前所理解的(我刚开始学,肯定理解的有很大的局限性):
用作搜索服务
生产环境下的搜索很复杂,不能只靠着关系型数据库的 like 语句去处理的,更是无法处理分词,相似度之类的,而Lucene可以被认为是最优秀的搜索引擎库,但是对于开发人员来说,它很复杂,而ES作为对Lucene的封装,除了使用简单外还实现了高可用的分布式集群方案。
分布式集群。
ES拓展性非常强,一个集群可有上百台机器,能够处理PB级别的结构化和非结构化数据,对索引进行分片,既提高了吞吐量,又能保证数据不丢失。
ES核心概念
index:索引,相当于mysql里的一个数据库
type:类型,相当于mysql里的一张表
document:文档,相当于mysql里的表里的一条记录
shard:分片,将一个index分成多个shard,这些shard分布在多个节点上。有primary shard和replica shard分片。
好处:
1、数据横向拓展,假如一个index有3T,分为3个shard,后来又增加了1T,只需要再增加一个分片即可,解决了数据存储问题
2、提高吞吐量,假如1台机器每秒钟处理2000个request,那么4个机器就能处理8000请求了。
replica:shard副本,一旦主shard挂了,不至于该shard的数据丢失,会转为读取replica的数据。
好处:
1、提高可用性。
2、提高吞吐量和性能,对于读请求,shard和replica都可以处理,吞吐量翻倍。
默认一个index为5个shard,每个shard有1个replica。
环境搭建
我主要是为了学习方便,所以是运行在Windows下的。下载windows版的ES,解压后进入bin目录,双击运行elasticsearch.bat,稍等一会,即可启动成功。
访问http://localhost:9200/?pretty
启动成功。
接下来安装kibana,它是操作ES的界面工具,可直接通过输入ES提供的API就可操作ES,方便学习,也是下载Windows版的,进入bin目录,双击kibana.bat 启动。
访问http://localhost:5601/
进入Dev Tools
基本命令
检测集群健康状态:get /_cat/health?v 看status值
green:每个index的primary shard和replica shard 都是active的
yellow:每个index的primary shard 都是active的,部分replica shard不是active的
red:不是每个index的primary shard 都是active的
集群中所有索引:get /_cat/indices?v
创建索引:put /index?v
删除索引: delete /index?v
至此,学习前的正式准备已经OK啦!