REST API

Elasticsearch提供了非常全面和强大的REST API,可以使用API与集群进行交互。 使用API可以做什么呢?

  • 检查群集,节点和索引运行状况,状态和统计信息
  • 管理您的群集,节点和索引数据和元数据
  • 对索引执行CRUD(创建,读取,更新和删除)和搜索操作
  • 执行高级搜索操作,例如分页,排序,过滤,脚本编写,聚合等等

API命令可以在Kibana控制台中运行。

使用_cat API查看集群的运行情况,可以在kibana控制使用命令查询,也可以通过rest服务查询。使用curl或者其他可以进行HTTP/REST调用的工具,或者在浏览器,都可以调用ElasticSearch的Rest API。

集群健康

GET /_cat/health?v
[elasticsearch@legaoyun10514 elasticsearch-6.5.1]$ curl http://192.168.105.10: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
1544146216 01:30:16  elasticsearch green           1         1      0   0    0    0        0             0                  -                100.0%

可以看到名称为elasticsearch的集群,已经启动,且状态是green,集群的状态有:

green,集群状态良好,集群功能齐全

yellow,所有数据都可用,但某些副本尚未配备,集群功能几圈

red,某些数据不可用,集群只有部分功能

当集群状态为红色时,虽然elasticsearch还可以通过可用的分片提供服务,但是存在不可用分片,还是要尽快的修复它

从上面的响应中看到,可以看到elasticsearch有一个节点,有0个分片,因为还没有数据。请注意,目前使用的是默认的集群名称(elasticsearch),ElasticSearch默认使用单播网络发现同一台机器上的其他节点。可以随时在机器上启动多个节点,启动的节点会自动加入一个指定名称的集群。查看健康状态,就可以看到总节点数发生变化。

集群节点列表

GET /_cat/nodes?v
[elasticsearch@legaoyun10514 elasticsearch-6.5.1]$ curl http://192.168.105.10:9200/_cat/nodes?v
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.105.10           25          98   0    0.02    0.04     0.05 mdi       *      8h_m9Uy

可以看到名称为8h_m9Uy,ip为192.168.105.10的节点,单独在集群中

查询索引列表

GET /_cat/indices?v
[elasticsearch@legaoyun10514 elasticsearch-6.5.1]$ curl http://192.168.105.10:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

直接告诉我们现在集群中还没有索引

创建索引

创建名称为demand的索引,再次查询索引

PUT /demand?pretty
GET /_cat/indices?v

第一个命令,使用PUT方式创建名称为demand的索引,后面接pretty是告诉ElasticSearch,如果有返回数据的话,打印格式化后的json。

PUT  http://192.168.105.10:9200/demand?pretty

响应

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "demand"
}

第二个命令,在创建索引后,查看索引

[root@legaoyun10514 package]#  curl http://192.168.105.10:9200/_cat/indices?v
health status index  uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   demand BGcTxGxVRtaEZOnHSHfXWA   5   1          0            0      1.1kb          1.1kb

从第二个命令的结果中可以看到,现在有一个名称为demand的索引,有5个主分片和1个副本,包含0个文档。索引健康状况是yellow,yellow表示某些副本尚未创建。 这个索引发生这种情况的原因是因为默认情况下Elasticsearch索引创建了一个副本。 但是由于我们目前只有一个节点在运行,因此在其他节点加入集群之前,无法成功的创建一个副本(用于HA)。 当其他节点的副本创建之后,此索引的运行状况将变为绿色。

索引和查询

PUT /customer/_doc/1?pretty
GET /customer/_doc/1?pretty
GET /_cat/indices?v

第一个命令将文档插入demand索引,如下将一个id为1的“需求”数据索引到已经创建的索引demand中。

PUT http://192.168.105.10:9200/demand/_doc/1?pretty
{
"projectName" : "八达岭长城",
"address":"北京市"
}

响应

{
    "_index": "demand",
    "_type": "_doc",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

这样一个“demand”文档就插入到demand索引中,并在在插入索引的时候需要指定文档的id为1。

其实,ElasticSearch在将文档插入到索引的时候,并不需要先显示的创建索引。在这个例子中,在插入文档时如果demand索引不存在,则会自动按照默认配置创建索引。

第二个命令,检索刚才插入到demand索引的文档

[root@legaoyun10514 package]# curl http://192.168.105.10:9200/demand/_doc/1?pretty
{
  "_index" : "demand",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "projectName" : "八达岭长城",
    "address" : "北京市"
  }
}

没有任何异常,这样,我们就通过id1请求到了之前插入到demand索引的文档,且返回到了_source字段中。

第三个命令,查询demand索引

[root@legaoyun10514 package]#  curl http://192.168.105.10:9200/_cat/indices?v
health status index  uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   demand BGcTxGxVRtaEZOnHSHfXWA   5   1          1            0      5.2kb          5.2kb

发现索引demand已经有一个文档了

删除索引

DELETE /customer?pretty
GET /_cat/indices?v

第一个命令,删除demand索引

DELETE http://192.168.105.10:9200/demand?pretty

响应

{
    "acknowledged": true
}

第二个命令查看所有索引列表

[root@legaoyun10514 package]#  curl http://192.168.105.10:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

索引已经删除

直接插入文档

PUT http://192.168.105.10:9200/demand/_doc/1?pretty
{
"projectName" : "八达岭长城",
"address":"北京市"
}

返回

{
    "_index": "demand",
    "_type": "_doc",
    "_id": "100",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

查看所有索引列表

[root@legaoyun10514 package]#  curl http://192.168.105.10:9200/_cat/indices?v
health status index  uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   demand MsrUocFNSfGdi0vCw5_PDw   5   1          1            0      4.9kb          4.9kb

索引已存在。

通过基本的API,先了解一下es吧^_^

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐