ElasticSearch搜索
*************************************
一、简介
二、相关概念
三、工作机制
四、安装、配置、部署
五、Java Api
六、更多应用
七、其它
*************************************
一、简介
Elasticsearch是一个实时分布式搜索和分析引擎
分布式实时文件存储
实时分析的分布式搜索引擎
可以扩展到上百台服务器
作为开源分布式搜索和数据处理平台,Elasticsearch不仅仅是一个数据库,
同时它还是一个基于Lucene构建的开源、分布式、RESTful信息检索框架,能够实时搜索,并且稳定可靠,
EIK架构为编程人员提供了一个分布式的可扩展的信息检索和基于Lucene的全文搜索,基于Logstash的日志处理机制、基于Kibana的挖掘结果可视化的的机制。
Elasticsearch的支持插件机制,如与mongoDB、couchDB同步的River插件、中文分词插件、Hadoop插件、脚本插件等。
二、相关概念
1.Index、Type、Document、Field
Index是数据存储的地方,可以快速高效的堆索引中的数据进行全文索引,类似于RDBMS数据库中的Database;在Index下一般会有多个存储数据的Type,Type类似于Database的table,用来存放具体数据;Document类似于关系数据库的一行数据,在一个Type里的每一个Document都有一个唯一的ID作为区分。
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
2.Mapping
Mapping定义索引下的Type的字段处理规则,如索引如何建立、索引数据类型、是否保存原始索引JSON文档,是否需要进行分词处理、如何进行分词处理等。
一般地,一个索引文件下能存储不同映像(Mapping)的类型文件(Types).
3.Cluster和Node
Elasticsearch中的Cluster是对外提供搜索服务的集群,组成这个集群的各个节点叫Node.集群Cluster是一组有着相同cluster.name的节点,他们协同工作,互相分享数据,提供了故障转移和扩展的功能。Node又分为IndexNode、DataNode等。节点之间是对等关系的(去中心化),而弱化的Master节点只不过多了维护集群状态的功能
4.Shards(分片)
Elasticsearch将一个完整的索引分成若干个部分,每个部分就是一个Shards,每个Shard实际上就是一个基于Lucene的索引。
Shards的数量一般在索引创建前制定,且索引创建后不能更改。
5.Replicas(备份)
Replics是索引的冗余备份,可用于防止数据丢失或用来做负载均衡。一般地,Elasticsearch会自动对索引请求进行负载均衡。
6.Recover
在有节点加入或退出集群Cluster或故障节点重新启动时,Elasticsearch会根据机器的负载情况,对索引分片Shards进行重新分配。
7.River
River是一个运行在Elasticsearch集群内部的插件,主要用来从外部获取数据,然后在Elasticsearch里创建索引。常见的有MongoDB、JDBC river Plugin等。
8.Gateway
是Elasticsearch索引数据快照的存储方式,当Elasticsearch集群关闭再重新启动时,就会从Gateway中读取索引数据快照。
Elasticsearch支持多种类型的Gateway,本地文件系统、分布式文件系统、Hadoop的HDFS
ElasticSearch是先把索引的内容保存到内存之中,当内存不够时再把索引持久化到硬盘中,同时它还有一个队列,是在系统空闲时自动把索引写到硬盘中。??????
9.Discover.zen
Discover.zen代表Elasticsearch的自动发现节点机制。Zen用来实现节点自动发现和Master节点选举,Master节点负责节点的加入和退出以及分片shard的重新分配。
10.Transport
Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互的,同时支持HTTP协议(JSON格式)、Thrift、Servlet等传输协议
三、工作机制
ElasticSearch中的Replica是副本的意思,创建副本的好处有两个,1,可以分流部分查询请求,2,如果集群中的某个分片丢失了,就可以使用这个副本将数据全部找回来,因为这个原因,副本分片和源分片不会放在同一节点上。ES中每一个索引都可以被分成多个分片,但不一定每个分片都有副本,但是一旦创建了副本,就会有主分片的说法(作为复制源的分片),分片和副本的数量可以在索引创建的时候指定。下图是副本和分片的示意图,分片和它的副本不会在同一个节点上。
在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。 默认情况下,Elasticsearch中的每个索引被分片5个主分片和1套副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本,这样的话每个索引总共就有10个分片。
当ES的一个节点启动后,它会通过广播方式找到集群中的其他节点,并且建立连接。
在集群中,其中的某个节点会被选取作为主节点,这个主节点负责管理集群状态。这个主节点对于用户来说是透明的,用户不需要知道哪个节点是主节点。任何操作都可以发送到任何节点。