一、初步检索


1、_CAT

1)、GET /_cat/nodes查看所有节点,比如:http://192.168.56.10:9200/_cat/nodes

127.0.0.1 16 84 0 0.02 0.02 0.05 dilm * 9bc163ddc58e

注:* 表示集群中的主节点

2)、GET /_cat/health :查看 es 健康状况,比如:http://192.168.56.10:9200/_cat/health

1606116097 07:21:37 elasticsearch green 1 1 3 3 0 0 0 0 - 100.0%

注:green 表示健康值正常

3)、GET /_cat/master查看主节点,比如:http://192.168.56.10:9200/_cat/master

9IyzJGJsTv6wsDrtE72x-w 127.0.0.1 127.0.0.1 9bc163ddc58e

4)、GET /_cat/indices :查看所有索引,等价于 mysql 数据室的 show databases,比如:http://192.168.56.10:9200/_cat/indices

green open .kibana_task_manager_1   cka1TDgRTGer9zZxXqebfw 1 0 2 0 32kb 32kb
green open .apm-agent-configuration MJW7kg4EQjqKw0G2x8KFOA 1 0 0 0 283b 283b
green open .kibana_1                FG4DE-8PSsCoHfvqkW0PhQ 1 0 8 0 35kb 35kb

2、索引一个文档

保存一个数据时,需要指定保存在哪个索引下的哪个类型下,并指定唯一标识 id,比如:PUT customer/external/1 表示在 customer 索引下的 external 类型下保存为标识 id 为 1 的数据,请求数据为:

{
 "name":"Andy"
}

我们可以使用 postman 工具来发送请求:

ES主节点和从节点的数据一致性 查看es主节点_返回结果

请求操作成功之后会显示 201 Created,返回的数据为:

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

返回的 JSON 数据中,带有下划线开头的,称为元数据,反映了当前的基本信息:

  • _index:表示该数据在哪个索引/数据库下;
  • _type:表示数据在哪个类型下;
  • _id:表示被保存的数据的 id;
  • _version:表示被保存数据的版本;
  • result:表示结果的执行类型,created 表示创建了一条数据,updated 则表示修改了该数据,同时版本号也会跟着发生变化。

PUT 请求和 POST 请求都可以用于创建和修改数据:

  • 请求如果不指定 id 则表示创建新的数据,并且 ES 会自动生成唯一 id,操作类型永远为 created
  • 请求指定了 id 的话,如果 id 对应的数据不存在则会创建该数据,如果存在,则会修改这个数据,并增加版本号;

注意:PUT 请求必须指定 id,不指定 id 会报错(也就是说 PUT 请求不能创建由 ES 自动生成 ID 的数据,只能创建指定 ID 的数据),所以,我们一般用来做修改操作。

下面我们使用 POST 请求来创建不指定 ID 的数据:

# 发送 POST 请求,不指定 id
POST http://192.168.56.10:9200/customer/external/

# 请求数据为
{
 "name":"John"
}

# 返回结果
{
    "_index": "customer",
    "_type": "external",
    "_id": "1Agn9HUB2eun-oaTm0LO", # 自动生成的 ID
    "_version": 1,
    "result": "created",           # 操作类型为创建
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 5,
    "_primary_term": 1
}

从返回结果可以看出,ES 帮我们自动生成了唯一标识 ID,而且不管相同操作多少次,其结果 ID 都不一样,并且每次都是 Created 操作,版本号 都是 1。

然后我们再使用 PUT 请求来修改数据:

# 修改指定 ID 的数据
PUT http://192.168.56.10:9200/customer/external/1Agn9HUB2eun-oaTm0LO

# 请求数据为
{
 "name":"Marry"
}

# 返回结果
{
    "_index": "customer",
    "_type": "external",
    "_id": "1Agn9HUB2eun-oaTm0LO", 
    "_version": 2,        # 版本号增加了 1
    "result": "updated",  # 操作类型为
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 8,
    "_primary_term": 1
}

从返回结果可以看到,该 ID 的数据操作结果为 updated,版本号也增加了 1 。

3、查看文档

查看的请求方式为:GET /[index]/[type]/[id]

比如:查看索引为 customer,类型为 external,id 为 1 的数据: http://192.168.56.10:9200/customer/external/1

{
    "_index": "customer", // 索引
    "_type": "external",  // 类型
    "_id": "1",           // 唯一 id
    "_version": 1,        // 版本号
    "_seq_no": 3,         // 并发控制字段,每次更新都会+1,用来做乐观锁
    "_primary_term": 1,   // 同上,主分片重新分配,如重启,就会变化
    "found": true,        // true 表示检索成功
    "_source": {          // 数据内容
        "name": "Andy"
    }
}