# Elasticsearch学习笔记(一)简介
## 什么是Elasticsearch?
以前我们学过标准信息搜索工具Lucene,但它不能够在一个合理的时间内存储和检索海量数据,不具备良好的可扩展性,一般也不适合分布式大数据搜索、挖掘和云计算环境。
为了满足大数据平台下的信息检索,并且高可靠性的性能要求,Elasticsearch就应运而生。
- 分布式实时文件存储
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器
作为开源分布式搜索和数据处理平台,Elasticsearch不仅仅是一个数据库,同时它还是一个基于Lucene构建的开源、分布式、RESTful信息检索框架,能够实时搜索,并且稳定可靠,EIK架构为编程人员提供了一个分布式的可扩展的信息检索和基于Lucene的全文搜索,基于Logstash的日志处理机制、基于Kibana的挖掘结果可视化的的机制。
Elasticsearch的支持插件机制,如与mongoDB、couchDB同步的River插件、中文分词插件、Hadoop插件、脚本插件等。
## 与Lucene的区别?
Elasticsearch执行搜索的速度更快,可以简单的通过HTTP方式,使用JSON来操作数据,并支持对分布式集群的搜索。
Elasticsearch对分布式支持,其索引功能分拆为多个分片,每个分片可有0个或多个副本,集群中的每个数据节点都可承载一个或多个分片,并且能协调和处理各种操作;负载再平衡(Rebalancing)和路由(Routing)在大多数情况下都是自动完成的。
## 相关概念:
(1)Cluster和Node——Elasticsearch中的Cluster是对外提供搜索服务的集群,组成这个集群的各个节点叫Node.集群Cluster是一组有着相同cluster.name的节点,他们协同工作,互相分享数据,提供了故障转移和扩展的功能。Node又分为IndexNode、DataNode等。节点之间是对等关系的(去中心化),而弱化的Master节点只不过多了维护集群状态的功能。
(2)Shards——Elasticsearch将一个完整的索引分成若干个部分,每个部分就是一个Shards,每个Shard实际上就是一个基于Lucene的索引。Shards的数量一般在索引创建前制定,且索引创建后不能更改。
(3)Replicas——Replics是索引的冗余备份,可用于防止数据丢失或用来做负载均衡。一般地,Elasticsearch会自动对索引请求进行负载均衡。
(4)Recover——在有节点加入或退出集群Cluster或故障节点重新启动时,Elasticsearch会根据机器的负载情况,对索引分片Shards进行重新分配。
(5)River——River是一个运行在Elasticsearch集群内部的插件,主要用来从外部获取以后数据,然后在Elasticsearch里创建索引。常见的有MongoDB、JDBC river Plugin等。
(6)Gateway——是Elasticsearch索引数据快照的存储方式,当Elasticsearch集群关闭再重新启动时,就会从Gateway中读取索引数据快照。Elasticsearch支持多种类型的Gateway,本地文件系统、分布式文件系统、Hadoop的HDFS
(7)Discover.zen——Discover.zen代表Elasticsearch的自动发现节点机制。Zen用来实现节点自动发现和Master节点选举,Master节点负责节点的加入和退出以及分片shard的重新分配。
(8)Transport——Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互的,同时支持HTTP协议(JSON格式)、Thrift、Servlet等传输协议。
(9)Index、Type、Document、Field——Index是数据存储的地方,可以快速高效的堆索引中的数据进行全文索引,类似于RDBMS数据库中的Database;在Index下一般会有多个存储数据的Type,Type类似于Database的table,用来存放具体数据;Document类似于关系数据库的一行数据,在一个Type里的每一个Document都有一个唯一的ID作为区分。
(10)Mapping——Mapping定义索引下的Type的字段处理规则,如索引如何建立、索引数据类型、是否保存原始索引JSON文档,是否需要进行分词处理、如何进行分词处理等。一般地,一个索引文件下能存储不同映像(Mapping)的类型文件(Types).
从图中可以看出,Elasticsearch可以接受来自本机、共享以及云平台上的数据;在Lucene提供的基本功能上,通过构建分布式索引,完成对大数据的索引、搜索等处理。其中,River作为Elasticsearch内部运行的插件,获取其他存储方式的数据到Elasticsearch.Zen用来作为节点自动发现和Master节点选举;EC2(Elastic Copute Cloud)借由Web服务的方式让使用者可以弹性的运行自己的Amazon机器映像,提供可调整的云计算能力。通过提供的Thrift、Memcached、HTTP等方式使用Elasticsearch的API。在顶层,用户可以基于RESTful和客户端的方式通过Elasticsearch API完成数据操作、管理等操作。
## RESTful接口URL的格式是?
curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>'
- VERB HTTP方法:GET(获取), POST(更新), PUT(创建), HEAD, DELETE(删除)
- PROTOCOL: http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
- HOST: Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
- PORT: Elasticsearch HTTP服务所在的端口,默认为9200
- QUERY_STRING: 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
- BODY: 一个JSON格式的请求主体(如果请求需要的话)![](https://box.kancloud.cn/2016-03-10_56e11d2413506.jpg)
这个是Elasticsearch的head插件,从这里可以看出主节点是Banshee,共用四个节点,71个主分片,至于Elasticsearch的插件机制、API操作等将在以后逐步的介绍。