elasticsearch6.7 01.入门指南(2)
2、安装(略)
默认情况下,elasticsearch 使用端口 9200 来访问它的 REST API。如果有必要,该端口也可以配置
3、探索集群
3.1 The REST API
既然我们已经启动并且运行了我们的节点(和集群),下一步是去了解如何与它通信。幸运的是,elasticsearch 提供了一个非常全面且强大的 REST API,您可以使用它来与集群进行交互。可以使用 API 来完成如下的几件事情 :
- 检查集群,节点,和索引的健康,状态和统计信息。
- 管理集群,节点和索引数据以及元数据。
- 针对索引执行 CRUD(Create,Read,Update,和 Delete)和搜索操作。
- 执行高级搜索,例如 paging,sorting,filtering,scripting,aggregations 等等。
3.2. Cluster Health(集群健康)
让我们从基本的健康检查开始,我们可以用它来看看我们的集群在做什么。我们将使用 curl 来做这件事情,当然您也可以使用任何允许您进行 HTTP/REST 调用的工具。假设我们在同一节点上启动了 elasticsearch 并且打开了另一个命令 shell 窗口。 为了检查集群健康,我们将使用 _cat API。您可以在 Kibana的控制台中通过点击 “VIEW IN CONSOLE” 或者通过点击下面的 “COPY AS CURL” 链接然后粘贴到终端中使用 curl 中运行该命令 :
#shell窗口
curl -XGET 'localhost:9200/_cat/health?v&pretty'
#kibana中
GET /_cat/indices?v
响应如下 :
epoch timestamp cluster status node.total node.data shards pri relo init
1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0
unassign pending_tasks max_task_wait_time active_shards_percent
0 0 - 100%
我们可以看到名为 “elasticsearch” 的集群处于绿色状态。
每当我们请求集群健康时,我们得到的集群状态分为绿色、黄色,和红色。
- 绿色表示一切正常(集群功能齐全)
- 黄色表示所有数据可用,但是有些副本尚未分配(集群功能齐全)
- 红色意味着由于某些原因有些数据不可用(可以使用集群的部分功能)
注意,集群是红色时,它仍然具有部分功能(例如,它将继续从可用的分片中提供搜索服务),但是您应该尽快去修复它,因为您已经丢失数据了。
另外,从上面的响应中,我们可以看到共计 1 个 node(节点)和 0 个 shard(分片),因为我们还没有在其中放入数据。请注意,由于我们使用的是默认的集群名称(elasticsearch),并且 elasticsearch 默认情况下使用单播网络来发现同一机器上的其它节点。有可能您不小心在您的电脑上启动了多个节点,默认情况下它们都会加入该群集。在这种情况下,你会在上面的响应中看到多个节点。
我们也可以获取集群的节点列表,如下所示 :
curl -XGET 'localhost:9200/_cat/nodes?v'
#kibana中
GET /_cat/nodes?v
响应如下 :
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 10 5 5 4.46 mdi * PB2SGZY
在这里,我们可以到命名为 “PB2SGZY ” 的节点名,这是目前在我们集群中的唯一节点。
3.3 List All Indices(查看所有索引)
现在,让我们来查看下所有的索引 :
curl -XGET 'localhost:9200/_cat/indices?v'
GET /_cat/indices?v
响应如下 :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
没有具体的值,这意味着elasticsearch集群中还没有索引。
3.4 Create an Index(创建索引)
现在我们创建一个名为 “customer” 的索引,然后再列出所有索引 :
curl -XPUT 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
#kibana中
PUT /customer?pretty
GET /_cat/indices?v
这是第一个使用PUT动作命令创建名为 customer 的索引。只需在调用的末尾附加pretty命令就可以可视化地打印JSON响应(如果有的话)
响应如下 :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open customer 95SQ4 5 1 0 0 260b 260b
第二个命令的结果告诉我们现在已经有 1 个名为customer的索引,并且它有 5 个主分片和 1 个副本(默认值)以及0个文档。
您可能也注意到customer索引中有一个yellow健康标记。回想下我们先前的讨论, yellow 意味着有些副本还没有被分配。该索引发生这种情况的原因,是因为默认情况下elasticsearch为此索引创建了一个副本。因为目前只有一个节点在运行,所以在另一个节点加入集群之前,还不能分配一个副本(为了高可用性)。一旦该副本分配到第二个节点上,该索引的运行状况将变为绿色。
3.5 索引和查询文档
现在让我们放入一些东西动我们的 customer 索引中去。让我们在 customer 索引中index一个ID为1的客户文档,如下所示:
curl -XPUT 'localhost:9200/customer/_doc/1?pretty&pretty' -d'
{
"name": "John Doe"
}'
PUT /customer/_doc/1?pretty
{
"name":"John Doe"
}
响应如下 :
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
从上面我们可以看到在客户索引中成功地创建了一个新的客户文档。该文档还有一个为1的内部 ID,它是我们在索引时指定的。
需要注意的是,您无需在索引文档之前先显式地创建索引。在前面的例子中,如果customer 索引事先不存在,Elasticsearch 将自动的创建 customer 索引。
现在让我们检索我们刚刚索引的文档 :
curl -XGET 'localhost:9200/customer/_doc/1?pretty&pretty'
GET /customer/_doc/1?pretty
响应如下 :
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 25,
"_primary_term" : 1,
"found" : true,
"_source" : { "name": "John Doe" }
}
除了一个字段found之外,上面没有什么特别的东西。结果说明我们找到了一个ID为1的文档,其中字段_source返回了我们从上一步索引的完整JSON文档。
3.6 Delete an Index(删除索引)
现在让我们删除刚才创建的索引并且再次列出所有索引 :
curl -XDELETE 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
DELETE /customer?pretty
GET /_cat/indices?v
响应如下 :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
这意味着索引被成功的删除,并且我们现在又回到了集群没有索引的初始状态了。
在我们继续之前,让我们仔细的看一看一些我们迄今为止学习的 API 命令 :
PUT /customer
PUT /customer/_doc/1
{
"name": "John Doe"
}
GET /customer/_doc/1
DELETE /customer
如果我们仔细的研究上面的命令,我们可以清楚的看到,我们如何访问 Elasticsearch 中的数据的 pattern(模式)。该 pattern(模式)可以概括如下 :
<HTTP Verb> /<Index>/<Type>/<ID>
这种REST访问模式在所有API命令中都是非常普遍的,如果您可以简单的记住它,对您掌握 Elasticsearch 会有一个良好的开端。
elasticsearch6.7 01.入门指南(2)的更多相关文章
- elasticsearch6.7 01.入门指南(4)
5.Exploring Your Data(探索数据) Sample Dataset(样本数据集) 现在我们已经学会了基础知识,让我们尝试在更真实的数据集上操作.我准备了一份顾客银行账户信息的虚构的 ...
- elasticsearch6.7 01.入门指南(3)
4.Modifying Your Data(修改数据) Elasticsearch 提供了近实时的操纵数据和搜索的能力.默认情况下,从索引/更新/删除数据到在搜索结果中显示数据会有 1 秒的延迟(刷新 ...
- elasticsearch6.7 01.入门指南(1)
Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎.它可以让您快速.近实时地存储.检索以及分析海量数据.它通常用作那些具有复杂搜索功能和需求的应用的底层引擎或者技术. 下面是 El ...
- 现代OpenGL教程 01 - 入门指南
原文链接传送门 译序 早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API.后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起 ...
- AngularJS快速入门指南01:导言
AngularJS使用新的attributes扩展了HTML AngularJS对单页面应用的支持非常好(SPAs) AngularJS非常容易学习 现在就开始学习AngularJS吧! 关于本指南 ...
- AngularJS快速入门指南02:介绍
AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...
- 《Gulp 入门指南》 : 使用 gulp 压缩 JS
<Gulp 入门指南> : 使用 gulp 压缩 JS 请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 访问论坛获取帮助 压缩 js 代码可降低 js 文件大小,提高页面打 ...
- RequireJS 入门指南
RequireJS 入门指南 http://requirejs.org/ 简介如今最常用的JavaScript库之一是RequireJS.最近我参与的每个项目,都用到了RequireJS,或者是我向它 ...
- 《KAFKA官方文档》入门指南(转)
1.入门指南 1.1简介 Apache的Kafka™是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键 ...
随机推荐
- EventTrigger动态添加监听事件
在 Unity3D 中,通过拖拽的方式在 EventTrigger 组件中添加监听事件就不多说了,很简单.这里主要说的是通过代码动态往 EventTrigger 组件中添加监听事件,有个很坑的地方,就 ...
- 1.8 新特性之 Lambda Expressions
Lambda expressions are allowed only at source level 1.8 or above The target type of this expression ...
- JavaScript实现LUHN算法验证银行卡号有效性
一般验证银行卡有效性用到一种叫做LUHN的算法,简介请参考这篇博客:基于Luhn算法的银行卡卡号的格式校验 注意: 1.LUHN算法只是能校验卡号是否有效,并不能校验卡号和用户名是否一致. 2.如果有 ...
- JavaScript获取键盘事件
JavaScript中: onkeydown 事件会在用户按下一个键盘按键时发生. onkeypress 事件会在键盘按键被按下并释放一个键时发生. onkeyup 事件会在键盘按键被松开时发生. 支 ...
- Telerik for AJAX RadGrid控件
作为一名.net小白,今天分享一下telerik知识的学习.熟悉ASP.NET Web Form的都知道Grid View或者是List View等表格控件,所以今天和大家分享一下telerik Ra ...
- python中实现排序list
作为一个非常实用的一种数据结构,排序链表用在很多方面,下面是它的python代码实现: from Node import * class OrderedList: def __init__(self) ...
- C++primer笔记之关联容器
在这一章中,有以下的几点收获: 1.pair类型的使用相当频繁,如果需要定义多个相同的pair类型对象,可考虑利用typedef简化其声明: typedef pair<string, strin ...
- Python网络编程-IO阻塞与非阻塞及多路复用
前言 问题:普通套接字实现的服务端的缺陷 一次只能服务一个客户端! accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求 re ...
- c++编程之内存的分配
当我们在进行编程时,特别是使用c++语言进行编程时,需要知道内存有几个内存区可供我们使用,因为c++可以直接操作内存.接下让我们来看看内存中的几大内存区. 1.栈区 栈区(stack)是速度最快的一个 ...
- springboot配置监听器、过滤器和拦截器
监听器:listener是servlet规范中定义的一种特殊类.用于监听servletContext.HttpSession和servletRequest等域对象的创建和销毁事件.监听域对象的属性发生 ...