ElasticSearch 是一个采用Restful API标准同时具有高扩展性和高可用性的实时数据分析全文搜索工具

 

  Node(节点):单个的装有ElasticSearch服务并且提供故障转移和扩展的服务器

 

  Cluster(集群):一个集群就是由一个或多个node组织在一起,共同工作,共同分享整个数据具有负载均衡功能的集群,默认

为"elasticsearch"。节点就是靠此名字来决定加入到哪个集群中。一个节点只能属性于一个集群


  Cluster工作过程:启动时,通过多播(默认)或单播方式在9300/tcp查找同一集群中的其它节点,并与之建立通信集群中的所有节

点会选举出一个主节点负责管理整个集群状态,以及在集群范围内决定各shards的分布方式。站在用户角度而言,每个均可接收并响应

用户的各类请求

  集群有状态:green, red, yellow

 

  Document(文档):一个文档是一个可被索引的基础信息单元

 

  Index(索引):索引就是一个拥有几分相似特征的文档的集合

 

  TYPE(类型):一个索引中你可以定义一种或多种类型

 

  Field(列):Field是ElasticSearch的最小单位,相当于数据的某一列

 

  Shards(分片):ElasticSearch将索引分成若干份,每个部分就是一个shard,ES默认将其分割为5个shard,用户也可以按需自

定义,创建完成之后不可修改

 

  Replicas(复制):Replicas是索引一份或多分拷贝,Replica用于数据冗余及查询时的负载均衡。每个主shard的副本数量可自定

义,且可动态修改

 

下图介绍了ElasticSearch的索引是如何存储的:

  

 

一个比较形象的了解可以看下图,它和mysql的一一对应关系

  

 

ElasticSearch的架构图如下:

  

底层Gateway表示ElasticSearch支持的数据存储格式,上面一层是lucene的框架,再上面一层是ElasticSearch对数据的加工处理方

式,Index Module:创建Index的模块

Search Module:搜索的模块 Mapping定义索引下面type字段的处理规则,比如索引如何建立,索引类型等

上一层Zen是用来实现节点自动发现,还有Master节点选取,假如Master出现故障,其它的这个节点会自动选举,产生一个新的

Master

Scripting 是ElasticSearch的脚本执行功能,能很方便对查询出来的数据进行加工处理


ElasticSearch是基于P2P的系统,首先通过广播的机制寻找存在的节点,然后再通过多播协议来进行节点间的通信,同时支持点对点的

交互


Transport为ElasticSearch的交互方式,默认使用http协议传输

API:Application Programming Interface的缩写,中文意思就是应用程序接口,使应用程序的使用人员无需访问应用程序的源码或

者了解内部的工作机制,就能基于这个接口去访问这个应用程序的数据

XML:可扩展标记语言,是一种程序与程序之间传输数据的标记语言(简单的说就是将一个程序里的数据传到另一个程序里)

JSON:javascript object notation的缩写,它是一种新型的轻量级数据交换格式(XML的替代品)

RESTFul:Representational State Transfer的缩写,中文意思是“表现层状态转换”,这句话有两个内容,第一个是"表现层",第二个

是"状态转换",表现层指的是资源的表现层,这里的资源指的是网络上的信息,比如说一段文本,一张图片,一部电影等等,每个资源

在网络上都有一个标识,这个标识一般叫做URL,把资源具体呈现出来的这种形式叫做表现层,而状态转换是要建立在表现层之上的

常规索引建立方式:文档-->关键词的映射过程(正向索引)

缺点:费时,得把整个文档全部遍历一遍

倒排反向建立索引:关键词-->文档的映射,把正向索引的结果重新构造成倒排索引(反向索引),ElasticSearch使用的是倒排索引


Restful API:
四类API:
(1) 检查集群、节点、索引等健康与否,以及获取其相应状态;
(2) 管理集群、节点、索引及元数据;
(3) 执行CRUD操作;
(4) 执行高级操作,例如paging, filtering等;

ES访问接口:9200/tcp

curl -X<VERB> '<PROTOCOL>://HOST:PORT/<PATH>?<QUERY_STRING>' -d '<BODY>'

VERB: GET, PUT, DELETE等;

PROTOCOL: http, https

QUERY_STRING:查询参数,例如?pretty表示用易读的JSON格式输出;

BODY: 请求的主体