ES-基本概念

目录:node

1.  ElasticSearch是什么
2. 基本概念
3. 几个关键词
 
正文:
1.  ElasticSearch是什么
    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并做为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,可以达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其余语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
 
2. 基本概念
    Lucene是由一个Java语言开发的开源全文检索引擎工具包。把Lucene用Netty封装成服务,使用JSON访问就说是Elasticsearch。
Elasticserach内置了对分布式集群和分布式索引的管理,因此相对Solr来讲,不须要额外安装Zookeeper,其更容易分布式部署。
使用Elasticsearch的搜索系统整理架构图以下所示:
 
    Elasticsarch的每个运行实例称为一个节点,便可以在同一台计算机上运行多个实例,也能够在每台计算机上只运行一个实例。
在一个分布式系统里,多个ES运行实例能够组成一个集群(cluster),该集群里有一个动态选举出来的主节点。若是主节点失败,会自动选出新的节点作为主节点,因此不存在单点故障。
   在同一个子网内,只须要在每一个节点上设置相同的集群名,这些集群名相同的节点会自动组成一个集群。ES包含了节点和节点之间的通讯模块及节点之间的数据分配和平衡模块。
   为了实现容错,ES会把查询文档集合分解为多个小的索引,每个小的索引就叫作分片(shards)。每个分片均可以有0到多个副本(replicas),而每个副本也都是分片的完整复制品,这样也提升了查询速度。
    一旦ES的某个节点数据损坏或者服务不可用的时候,就能够用其余的节点来代替坏掉的节点,以达到高可用的目的。当有节点加入或者退出时,主节点会根据机器的负载对索引分片进行从新分配,当“挂掉”对节点再次重现启动对时候也会进行数据恢复(recovery)。
    ES经过网关(Gateway)来管理集群恢复,能够配置集群须要加入多少节点才能启动恢复数据。网关配置用于恢复任务失败的索引。当节点崩溃并从新启动时,ES将从网关读取全部的索引和元数据。
 
3. 几个关键词
 
索引:
     ES将它的数据存储在一个或者多个索引中。用sql领域的术语来类比,索引就像数据库,能够向索引写入文档或者从索引中读取文档,并经过ES内部使用的Lucene将数据写入索引或从索引中检索数据。
索引是具备某些相似特征的文档集合,索引由名称标识(必须所有小写)。
 
文档:
    文档是能够创建索引的基本信息单元。例如,您能够为单个客户提供文档,为单个产品提供一个文档,为单个订单提供一个文档。该文档以JSON(JavaScript Object Notation)表示,JSON是一种广泛存在的互联网数据交换格式。
在索引/类型中,您能够根据须要存储任意数量的文档。请注意,尽管文档实际上驻留在索引中,但实际上必须将文档编入索引/分配给索引中的类型。
 
映射(mapping):
    ES中的索引模式叫作Mapping。索引中的每一个文档都有一个type,每一个type拥有本身的模式或者模式定义。
用户能够设置一些参数,来决定如何将输入文本分割为词条,哪些词条应该被过滤掉,或者哪些附加处理时有必要被调用的。如排序时所需的字段内容信息,者就是mapping扮演的角色。
 
类型:
    ES中每一个文档都有与之对应的类型定义。这容许用户在一个索引中存储多种文档类型,并为不一样文档类型提供不一样的映射。
 
节点:
     单个的ES服务实例称为节点(node)。不少时候部署一个ES节点就足以应付大多数简单的应用,可是考虑到容错性或在数据膨胀到单机没法应付这些情况时,你也许会更倾向于使用多节点的ES集群。

集群:
     集群(cluster)是一组具备相同cluster.name的节点集合,他们协同工做,共享数据并提供故障转移和扩展功能,固然一个节点也能够组成一个集群。
     集群由惟一名称标识,默认状况下为“elasticsearch”。此名称很重要,由于若是节点设置为按名称加入集群的话,则该节点只能是集群的一部分。
确保不一样的环境中使用不一样的集群名称,不然最终会致使节点加入错误的集群。
     集群状态经过 绿,黄,红 来标识:
     绿色 - 一切都很好(集群功能齐全)。
     黄色 - 全部数据都可用,但还没有分配一些副本(集群功能齐全)。
     红色 - 某些数据因为某种缘由不可用(集群部分功能)。
     注意:当群集为红色时,它将继续提供来自可用分片的搜索请求,但您可能须要尽快修复它,由于存在未分配的分片。web

分片:
    索引可能存储大量可能超过单个节点的硬件限制的数据。例如,占用1TB磁盘空间的十亿个文档的单个索引可能不适合单个节点的磁盘,或者可能太慢而没法单独从单个节点提供搜索请求。
    为了解决这个问题,Elasticsearch 提供了将索引细分为多个称为分片的功能。建立索引时,只需定义所需的分片数便可。每一个分片自己都是一个功能齐全且独立的“索引”,能够托管在集群中的任何节点上。
   设置分片的目的及缘由主要是:sql

  •    它容许您水平拆分/缩放内容量;
  •    它容许您跨分片(可能在多个节点上)分布和并行化操做,从而提升性能/吞吐量;
  •    分片的分布方式以及如何将其文档聚合回搜索请求的机制彻底由 Elasticsearch 管理,对用户而言是透明的。

   在可能随时发生故障的网络/云环境中,分片很是有用,建议使用故障转移机制,以防分片/节点以某种方式脱机或因任何缘由消失。为此,Elasticsearch 容许您将索引的分片的一个或多个副本制做成所谓的副本分片或简称副本。数据库

副本:
     副本,是对分片的复制。目的是为了当分片/节点发生故障时提供高可用性,它容许您扩展搜索量/吞吐量,由于能够在全部副本上并行执行搜索。
总而言之,每一个索引能够拆分为多个分片。索引也能够复制为零次(表示没有副本)或更屡次。复制以后,每一个索引将具备主分片(从原始分片复制而来的)和复制分片(主分片的副本)。
    能够在建立索引时为每一个索引定义分片和副本的数量。建立索引后,您也能够随时动态更改副本数,但这不是一项轻松的任务,因此预先计划正确数量的分片是最佳方法。
    默认状况下,Elasticsearch 中的每一个索引都分配了5个主分片和1个副本,这意味着若是集群中至少有两个节点,则索引将包含5个主分片和另外5个副本分片(1个完整副本),总计为每一个索引10个分片。
 
网关:
    在ES的工做过程当中,关于集群状态,索引设置的各类信息都会被收集起来,并在网关(gateway)中被持久化
相关文章
相关标签/搜索