一、Elasticsearch是什么
Elasticsearch是由Shay Banon发起的一个开源搜索服务项目,并于2010年2月开源。Elasticsearch不仅仅能提供全文检索功能,它还能提供高效的分布式数据存储、索引、搜索,能完成对大数据的自动分片、自动负载索引,并提供RESTful Web的风格接口。
二、Elasticsearch中涉及到的相关概念
- Cluster和Node ,Cluster是对外提供搜索服务器的集群,组成这个Cluster的各个节点就做Node。借点Node是Elasticsearch运行的实例。
- Shards : Elasticsearch将一个完整的索引分成若干部分,每个部分就是一个Shards。每个Shard实际上就是一个基于Lucene的索引。Shards存储在相同或不同的Node上; Shards是数量一般在索引创建时指定,且索引创建后不能更改(其初始配置也是可以修改的)。检索时,Elasticsearch会将查询发送到不同的Shards上并将返回结果合并,这个过程对用户来说是透明的。
- Replicas :是索引的冗余备份,可用户防止数据丢失货用来做负载均衡。一般地,Elasticsearch会自动对搜索请求进行负载均衡。
- Recovery:在有借点加入或退出集群Cluster或故障节点重新启动时,Elasticsearch会的根据机器负载情况,对索引分片Shards进行重新分配。
- River:是一个运行在Elasticsearch集群内部的插件,主要用来从外部获取异构数据,然后在Elasticsearch里创建索引。常见的有couchDbriver、RabbitMQriver Plugin、Twitter river Plugin、Wikipedia river plugin、MongoDB river plugin、JDBC river Plugin等
- Getway:是Elasticsearch索引数据快照的存储方式,当Elasticsearch集群关闭再重新启动时,就会从Getway中读取索引数据快照。
- Discovery.zen : 代表Elasticsearch的字段发现节点机制。Zen用来实现节点自动发现和Master节点选举,Master节点负责处理节点的加入和退出以及分片Shard的重新分配。Master不是固定不变的,当前Master故障后,其他节点自动选举产生新的Master。只有当节点准备就绪后,该节点才会被通知可以被使用。
- Transport:代表内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互,同时它支持HTTP协议(JSON格式)、Thrift、Servlet、Memcached、ZeroMQ等传输协议。
- Index、Type、Document 、Field: Index是存储索引的地方,可以快速高效地对索引中的数据进行全文索引;类似于RDBMS数据库中的Database; 在Index下一般会有多个Type,Type类似于database中的Table,用来存放具体数据;Document是类似关系数据库中的一行数据,在一个Type里的每一Document都有一个唯一的ID作为区分,这里与RDBMS不同的是,Document 不需要有固定 数据,不同文档可以具有不同的字段集合;Field类似于数据库中的某一列,是Elasticsearch存储的最小单位。
- Mapping : 定义索引下Type的字段处理规则,如索引如何建立、索引数据类型、是够保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。一般地,一个索引文件下能存储不同映像(Mapping)的类型文件(Types)。Mapping也可以通过语句删除、此时对应的类型文件下的所有数据也会被删除。
三、Elasticsearch 的部分插件
- Analysis-ansj ansj中文分词器
- Analysis-ik IK中文分词器
- Analysis-mmseg mmseg中文分词
- Analysis-pingyin 拼音分词器
- Analysis-string2int 字符串转整形工具,可用在Facets、Aggregation功能上。
- Bigdesk 监控Elasticsearch状态
- Head 对Elasticsearch进行多种操作的客户端工具
- Inquisitor 调试查询
- Kopf 网络管理
- Marvel 图形化监控客户端
四、Elasticsearch 基本架构
RESTful 接口的URL的格式是:http://localhost:9200/<index>/<type>/[id]
其中,index 、type是必须提供的(index可以理解为数据库;type可以理解为表);id是可选的(相当于数据库表中的主键,是唯一的)增删改分别对应HTTP请求的PUT、GET、 DELETE。对于PUT来说,调用时如果数据不存在,就创建;如果数据一存在、就更新。
五、Elasticsearch 索引及其构建
简单来说,在Elasticsearch中建立索引的简要流程如下:
- 准备待处理的文档。一般而言,文档准备考研采用JSON格式,也可以使用第三方的工具协助进行处理。
- 将准备好的数据提交文档给Elasticsearch。
- 完成索引。
- 返回索引结果。http://localhost:9200/index名称/type名称/文档唯一标识
使用Head新建索引