探索你的集群
REST API
现在我们已经启动并运行了节点(和集群),下一步是了解如何与它进行通信,幸运的是,Elasticsearch提供了一个非常全面和强大的REST API,你可以使用它与集群进行交互,使用API可以完成的一些事项如下:
- 检查群集,节点和索引运行状况,状态和统计信息
- 管理你的群集,节点和索引数据和元数据
- 对索引执行CRUD(创建,读取,更新和删除)和搜索操作
- 执行高级搜索操作,例如分页,排序,过滤,脚本编写,聚合等等
集群健康
让我们从基本运行状况检查开始,我们可以使用它来查看集群的运行情况,我们将使用curl来执行此操作,但你可以使用任何允许你进行HTTP/REST调用的工具,假设我们仍然在我们启动Elasticsearch的同一节点上打开另一个命令shell窗口。
要检查群集运行状况,我们将使用_cat API,你可以通过单击“VIEW IN CONSOLE”在Kibana的控制台中运行以下命令。
GET /_cat/health?v
或复制如下curl
命令并将其粘贴到终端中:
curl -X GET "localhost: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
1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
我们可以看到名为“elasticsearch”的群集处于green状态。
每当我们查看群集健康时,我们要么获得green,yellow或red。
- Green — 一切都很好(集群功能齐全)
- Yellow — 所有数据都可用,但尚未分配一些副本(群集功能齐全)
- Red — 某些数据由于某种原因不可用(群集部分功能)
当群集为red时,它将继续提供来自可用碎片的搜索请求,但你可能需要尽快修复它,因为存在未分配的碎片。
同样从上面的响应中,我们可以看到总共1个节点,并且我们有0个碎片,因为我们还没有数据。请注意,由于我们使用的是默认群集名称(elasticsearch),因此默认情况下Elasticsearch使用单播网络发现来查找同一台计算机上的其他节点,你可能会意外地在计算机上启动多个节点并让它们全部加入单个群集,在这种情况下,你可能会在上面的响应中看到多个节点。
我们还可以获得群集中的节点列表,如下所示:
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”的节点,它是我们集群中当前的单个节点。
列出所有索引
现在让我们来看看我们的索引:
GET /_cat/indices?v
响应如下:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
这仅仅意味着我们在集群中还没有索引。
创建索引
现在让我们创建一个名为“customer”的索引,然后再次列出所有索引:
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 95SQ4TSUT7mWBT7VNHH67A 5 1 0 0 260b 260b
第二个命令的结果告诉我们,我们现在有一个名为customer的索引,它有5个主碎片和1个副本(默认值),并且它包含0个文档。
你可能还注意到customer索引标记了yellow运行状况,回想一下我们之前的讨论,yellow表示某些副本未(尚未)分配。之所以会出现这种情况,是因为Elasticsearch默认情况下为这个索引创建了一个副本,由于我们目前只有一个节点在运行,因此在另一个节点加入集群的稍后时间点之前,尚无法分配一个副本(用于高可用性),将该副本分配到第二个节点后,此索引的运行状况将变为green。
索引和查询文档
现在让我们在customer索引中加入一些内容,我们将一个简单的customer文档索引到customer索引中,ID为1,如下所示:
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
}
从上面可以看出,在customer索引中成功创建了一个新的customer文档,该文档的内部标识为1,我们在索引时指定。
值得注意的是,Elasticsearch在你将文档索引之前不需要先显式创建索引,在前面的示例中,如果customer索引事先尚未存在,则Elasticsearch将自动创建customer索引。
现在让我们检索刚刚索引的文档:
GET /customer/_doc/1?pretty
响应如下:
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : { "name": "John Doe" }
}
除了字段之外,这里没有什么不寻常的,found
,说明我们找到了一个请求ID为1的文档,另一个字段_source
,它返回我们从上一步索引的完整JSON文档。
删除索引
现在让我们删除刚刚创建的索引,然后再次列出所有索引:
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中访问数据的模式,该模式可归纳如下:
<REST Verb> /<Index>/<Type>/<ID>
这种REST访问模式在所有API命令中都非常普遍,如果你能够简单地记住它,你将在掌握Elasticsearch方面有一个良好的开端。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。