ElasticSearch快速入门
一.前言
上周公司在做一个模块功能的时候 因为最后的结果数据量远远超过了预想的数据量 最后不得不把mysql换成Elastic Search,以前在学校的时候也没有1接触到这些东西 刚好这段时间处于项目空档期 所以刚好趁机学习一下
二.介绍
ElasticSearch是一个分布式的RESTful风格的搜索和数据分析殷勤
RESTful(一组架构约束条件和原则)
特点:1.每一个URL代表一种资源;
2.客户端使用GET,POST,PUT,DELETE4个操作方式的动词对服务端资源进行操作;GET用来获取资源;POST用来新建资源(也可以用来更新资源);PUT用来更新资源,DELETE用来删除资源;
3.通过操作资源的表现形式来操作资源
4.资源的表现形式是XML或者HTML
5.客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必须的信息。
言归正传,下面说一下ElaticSearch的特点
查询:ElasticSearch允许执行和合并多种类型的搜索 结构化 非结构化 地理位置 度量指标 搜索方式随心而变
分析:找到与查询最匹配的十个文档是一回事 并且聚合可以让你从大处着眼,探索数据的趋势和模式
速度:很快 自己意会
可扩展性:可以在笔记本电脑上运行 也可以在承载了PB级(1PB等于1024TB)数据的很多台服务器上运行;
弹性:ElasticSearch运行在一个分布式环境中
灵活性:具备多个案例场景 数字 文本 地理位置 结构化 非结构化
三 说在前面
ElasticSearch是一个高度可伸缩的开源全文搜索和分析引擎 ,允许您快速的接近实时的存储,搜索和分析大量数据 它是一个近乎实时的搜索平台 这意味着从索引文档到可以搜索的时间只有轻微的延迟(通常只有1s)
Cluster:
集群是一个或多个节点(服务器)的集合,他们共同保存你的整个数据,并提供跨所有节点的联合索引和搜索功能。一个集群由一个唯一的名称标识,默认这个唯一标识的名称是‘elasticsearch’。这个名称比较重要 因为如果节点被设置为按其名称加入集群,那么节点只能是集群的一部分。
确保不要在不同的环境中用相同的集群名称。否则可能导致节点加入到错误的集群中。可以使用不同的关键字来分别用于开发,测试,和正式集群的名字
Node:
节点是一个单独的服务器,她是集群的一部分,存储数据,并参与集群的搜索和索引功能,节点也是由名称标识的 在默认的情况下 该名称是在 启动时分配给节点的随机通用唯一标识符(UUID) 但如果不想使用默认的节点名 可以定义到任何想要的节点名 但是这个名称一定是要具备足够的辨识度 便于你识别 网络中的哪些服务器对应于你ElasticSearch的集群中的哪些节点
一个节点可以通过 配置集群名称 来加入到一个特定的集群中 默认情况下 每个节点都被设置加入到一个名字叫'elastic search'的集群中 这就意味着如果你启动了很多个节点 并且假设他们彼此可以互相发现 那么他们将自动形成 并加入一个名为 elasticsearch 的集群中
一个集群中可以有任意数量的节点 当当前网络没有运行任意一个节点的时候 此时启动一个节点将默认形成一个单节点的名字叫做‘elasticsearch的集群
Index:
索引是具有某种相似特征的文档的集合 例如 你可以有一个顾客数据索引 产品目录索引和订单数据索引 索引有一个名称 (必须是小写)标识 ,该名称用于 在对其其中的文档 执行索引 搜索 更新 和删除操作 时引用索引
Document:
文档是可以被索引的基本信息单元 文档用JSON表示
Shards & Replicas
一个索引可能存储大量数据 这些数据可以超过 单个节点的硬件限制 例如 一个包含10亿条文档占用1TB磁盘空间的索引可能不适合在单个节点上 或者可能太慢而不能单独处理 来自单个节点的搜索请求
为了解决这个问题 ElasticSearch 提供了 将你的索引细分为多个碎片(或者叫分片)的能力 在创建索引时 可以简单的定义所需要的分片数量 每个分片本身就是一个功能完全独立的索引 可以驻留在集群的任何节点上
分片为什么重要?
1.他允许你水平的分割/拓展内容卷
2.他允许你跨分片(可能在多个节点上)分布和并行操作 从而提高性能和吞吐量
在一个网络/云环境中随时都有可能出现故障 推荐有一个融灾机制 Es允许你将 一个或多个索引 复制到其他地方 这被称之为副本
复制之所以重要 有两个原因
1.他提供了 放在一个shade/node失败时的高可用性,出于这个原因,很重要的一个点是 一个副本从来不会分配到与他复制的原始分片相同节点中 也就是说 副本是放在另外的节点上的
2.他允许拓展搜索量/吞吐量,因为搜索可以在所有的副本上并行执行
总而言之 每个索引都可以被分割成很多分片 索引也可以被复制零(意味着没有副本)或更多次,一旦被复制 每个索引都将具有主分片(被复制的原始分片)和副本分片(主分区的副本),在创建索引时 可以给每个索引 定义分片 和 副本的数量 。创建索引时 你可以动态 地更改副本的数量 但不能更改事后分片的数量
在默认情况下 ElasticSearch中的每个索引 都分配了5个主分片 和 1个副本 这意味着如果集群中至少有两个节点 那么索引将有5个主分片和另外5个副本分片(这5个人副本分片组成1个完整副本)每个索引总共有10个分片