# cat APIs

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.0/cat.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/cat.html)

译文链接 : [http://www.apache.wiki/display/Elasticsearch/cat+APIs](http://www.apache.wiki/display/Elasticsearch/cat+APIs)

贡献者 : [那伊抹微笑](/display/~wangyangting)

## Introduction（介绍）

对于计算机来说，**JSON** 是一种很好的格式，虽然它便于打印，但是尝试找出潜在的数据关系是比较麻烦的。人们的眼睛，特别是在一个 **ssh** 终端看东西时，需要紧凑的，对齐的文本。该 **cat API** 的目标就是为了满足这种需求。

所有的 **cat** 命令接受一个查询字符串的参数 **help** 以看到它提供的所有的 **header**（头部）和其它的信息，以及单个的 **/_cat** 命令可以列出所有可用的命令。

## 常见参数

### Verbose（详细的）

每个命令都可以接受一个查询字符串参数 **v** 以在运行时输出更详细的信息。例如 : 

```
curl -XGET 'localhost:9200/_cat/master?v&pretty'
```

可能会响应 : 

```
id                     host      ip        node
u_n93zwxThWHi1PDBJAGAg 127.0.0.1 127.0.0.1 u_n93zw
```

### Help（帮助）

每个命令都可以接受一个查询字符串参数 **help**，它将输出命令中可用的列。例如 : 

```
curl -XGET 'localhost:9200/_cat/master?help&pretty'
```

可能响应如下 : 

```
id   |   | node id
host | h | host name
ip   |   | ip address
node | n | node name
```

### Headers（页眉）

每个命令都可以接受一个查询字符串参数 **h**，它将会强制只显示那些出现的列。例如 : 

```
curl -XGET 'localhost:9200/_cat/nodes?h=ip,port,heapPercent,name&pretty'
```

响应如下 : 

```
127.0.0.1 9300 27 sLBaIGK
```

您也可以像 **/_cat/thread_pool?h=ip,bulk.*** 这样从 **bulk..** 这里开始使用简单的通配符请求多个列以获取所有的 **header**（页眉或者别名）。

### Numberic formats（数字格式）

许多命令提供了一个数字输出的类型，可能是一个字节，大小，或者时间值。默认情况下，这些类型对于人们是友好的格式，例如，**3.5mb**（而不是 **3763212**），但是却不适合排序。所以为了可以在这些值上进行操作，顺序是很重要的，您必须改变它的格式。

假设您想找出集群中最大的索引（使用分片存储，而不是文档的数量）。**/_cat/indices API** 是可以做到的。我们只需要调整两件事情。首先，我们希望关闭对人们友好的模式。我们就可以使用 **byte-level**（字节级别）的原理。然后我们使用合适的列将我们的输出重定向到 **sort** 中。下面的例子演示了根据第**8**列数值的大小按照降序排序 : 

```
% curl '192.168.56.10:9200/_cat/indices?bytes=b' | sort -rnk8
green wiki2 3 0 10000   0 105274918 105274918
green wiki1 3 0 10000 413 103776272 103776272
green foo   1 0   227   0   2065131   2065131
```

如果您希望改变 [time units](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/common-options.html#time-units "Time unitsedit")，请使用 **`time` **参数。

如果您希望改变 [size units](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/common-options.html#size-units "Unit-less quantitiesedit")，请使用 **`size` **参数。

如果您希望改变 [byte units](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/common-options.html#byte-units "Byte size unitsedit")，请使用 **`bytes` **参数。

### Response as text, json, smile, yaml or cbor（作为 text, json, smile, yaml 或者 cbor 格式响应）

```
% curl 'localhost:9200/_cat/indices?format=json&pretty'
[
  {
    "pri.store.size": "650b",
    "health": "yellow",
    "status": "open",
    "index": "twitter",
    "pri": "5",
    "rep": "1",
    "docs.count": "0",
    "docs.deleted": "0",
    "store.size": "650b"
  }
]
```

当前支持的格式（为 **?format**= 参数）: - **text**（默认）- **json** - **smile** - **yaml** - **cbor**。此外，还可以设置 “**Accept**” **HTTP** **header** 到相应的媒体格式。以上所有格式都支持，**GET** 参数优先于 **header**。例如 : 

```
% curl '192.168.56.10:9200/_cat/indices?pretty' -H "Accept: application/json"
[
  {
    "pri.store.size": "650b",
    "health": "yellow",
    "status": "open",
    "index": "twitter",
    "pri": "5",
    "rep": "1",
    "docs.count": "0",
    "docs.deleted": "0",
    "store.size": "650b"
  }
]
```