Elasticsearch
1、开始
Elasticsearch 是一个高度可扩展的开源的全文搜索分析引擎。它允许你近实时的快速存储、搜索和分析海量数据。它通常的应用场景就是为一些复杂的搜索应用提供一个底层的引擎或技术,在其上搭建应用,解决海量数据的搜索问题。
下面是Elasticsearch几个常见的应用场景:
- 网上商城。你可以用Elasticsearch来存储你全部的商品类目和清单并提供商品搜索与推荐的功能。
- 日志分析,通过分析应用log来发现一些趋势、统计数据、概要亦或是异常信息。这种场景下你可以使用Elasticsearch的Logstash来收集、汇聚、分析数据,然后通过Logstash消费这些数据并写入Elasticsearch。一旦这些数据进入Elasticsearch你就可以搜索、汇集这些数据来挖掘你感兴趣的信息。
- 比价推荐系统,根据各个供应商提供同一商品的价格来为感兴趣的买家推荐便宜的商品。你可以搜集各个商家的商品价格信息放入Elasticsearch,然后使用reverse-search来与买家期望的价格来比较,一旦发现匹配数据就推送给买家。
- 智能数据分析,海量数据的调查、分析可视化,可以使用Elasticsearch来存储数据然后使用Kibana来做数据可视化,你还可以使用Elasticsearch的聚合功能来执行商业智能的很多查询。
1.1、基本概念
Elasticsearch中有几个核心的概念,在学习的开始能够理解这些概念对于整个学习过程有非常大的帮助。
1.近实时
Elasticsearch是一个近实时的搜索平台,意思是从你开始索引一个文档到文档可检索之间只有很少的一点时间(一般是1秒)。
2.集群
集群是一个或多个节点(服务器)的集合,它们一起保存你的整个暑假并在所有节点上提供联合索引与搜索功能。每个集群使用唯一的名字来区分,默认为“elasticsearch”,你可以在配置文件中修改,这个名字非常重要,因为子节点通过设置名字来加入到集群中。
当然也可以建立一个只有一个节点的集群,这是合理合法的。
注意:集群名字必须唯一,否则节点可能加入到其它集群。
3.节点
节点属于集群中的一部分,它属于一个单个的服务,用来存储数据并参与集群的索引与搜索。节点也使用唯一的名字来区分,默认在服务开启的时候分配一个唯一的UUID。这个名字对于指定集群中那些节点提供指定服务来说十分重要。
每个节点都可以配置加入某个特定的集群通过集群名称,默认如果各个节点可以发现其它节点他们会加入同一个名为elasticsearch的集群。
4.索引
一个索引是一个有着公共属性的文档的集合。例如:客户数据索引;商品目录索引;订单索引等。
索引通过唯一的索引名字来区分(必须都是小写字母),这个索引名可以在后期的索引(索引、搜索、更新、删除)过程中使用。
一个集群中你可以定义任意多的索引。
5.类型
在一个索引中你可以定义各个或者多个类型。类型是你索引的逻辑分类,你可以自己定义类型,只要你自己可以区分这种类型是什么东西即可。通常,一个类型定义了一个有着公共字段的文档集合。例如:用户数据;博客数据;评论数据等。
6.文档
文档是elasticsearch可以索引的基本单位。使用json来标示。
在一个索引–类型里面你可以定义任意多个文档。
Relational DB | Databases | Tables | Rows | Columns |
---|---|---|---|---|
Elasticsearch | Indices | Types | Documents | Fields |
7.分片与副本
一个索引可以存储超过单个节点硬件限制的存储数据量。Elasticsearch通过将一个索引分割成多个分片来实现在集群中存储超出单个节点的存储能力。以下连个原因说明分片很重要:
1、它允许你水平分割你的数据卷。
2、它允许你跨分片分布并行操作,从而提高吞吐量。
为了防止数据丢失,Elasticsearch提供了副本的概念,副本是对索引分片的拷贝。创建副本的主要原因有:
1、高可用,副本不会被分配在于源同一个节点上。
2、扩展搜索吞吐量,搜索可以并行的在所有副本上执行。
分片与副本的数量在新建索引的时候被定义,副本的数量可以在运行过程中动态修改,但是分片的数量一旦定义完成不可以修改,默认一个索引有5个主分片与一个副本(五个分片)。
一个索引中最大可以存储大于21亿个文档。
1.2、探查你的集群
现在我们的集群已经运行起来了,下一步我们就要去与集群进行数据交互,Elasticsearch提供了一个非常强大的REST API,我们可以通过它来进行一下操作:
1.检查你的集群、节点以及索引的健康情况、运行状态以及数据统计情况。
2.管理你的集群、节点、索引数据以及元数据。
3.通过索引的名字进行CRUD(Create、Read、Update、Delete)以及搜索操作。
4.执行高级搜索功能,如分页、排序、过滤、脚本、聚合以及其它高级功能。
1.2.1、集群健康状态
Elasticsearch健康检查,可以帮我们了解我们的集群在干什么,使用_cat API提供的REST API可以查看
GET http://192.168.0.103:9200/_cat/health?v
显示结果:
epoch | timestamp | cluster | status | node.total | node.data | shards | pri | relo | init | unassign | pending_tasks | max_task_wait_time | active_shards_percent |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1488117930 | 22:05:30 | somnus-app | green | 2 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | - | 100.0% |
集群的状态有绿色、黄色和红色。
绿色
说明集群一切都ok,集群能够提供完全的功能;
黄色
说明所有的数据都可以访问,集群提供完全的功能,但是一些副本没有被分配,存在单点故障问题;
红色
说明一些数据已经不可以访问了,但是集群仍然可以提供部分功能(你可以从可达的分片中搜索数据),这时候要尽快修复要不然会丢数据。
1.2.2、查看集群中的节点列表
可以通过集群中任意一个节点执行下面的命令,返回集群中所有的节点列表以及各个节点的信息。
GET http://192.168.0.103:9200/_cat/nodes?v
显示结果:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.0.103 10 79 0 0.01 0.07 0.08 mdi * node-1
1.2.3、查看集群的所有指数信息
通过REST API查看集群中所有的指数信息,包括健康状况、索引情况、文档数等等一些信息。
GET http://192.168.0.103:9200/_cat/indices?v
显示结果:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size