# 与ElasticSearch通信API

## 官方文档推荐

Kibana在服务器和浏览器上公开两个客户端，以与Elasticserach进行通信。有一个管理客户端用于管理集群的状态，以及一个数据客户端

### 服务器客户端

在服务器端可以通过以下方式获取：

```
  const adminCluster = server.plugins.elasticsearch.getCluster('admin');
  const dataCluster = server.plugins.elasticsearch.getCluster('data');

  //ping as the configured elasticsearch.user in kibana.yml
  adminCluster.callWithInternalUser('ping');

  //ping as the user specified in the current requests header
  adminCluster.callWithRequest(req, 'ping');
```

### 浏览器客户端

浏览器客户端可以通过AngularJS services获取：

```
uiModules.get('kibana')
.run(function (es) {
  es.ping()
  .catch(err => {
    console.log('error pinging servers');
  });
});
```

## 非官方文档推荐

### Why

为什么 官方未推荐，我在这里还介绍了，主要是因为以下原因： 1. 用这种方式可以很好的debug, 可以单独运行。 2. 官方文档较全。

### 服务器客户端

首先引入依赖包

```
const elasticsearch = require('elasticsearch');
```

server 端初始化调用文件中可以按如下使用：

```
  const client = new elasticsearch.Client({
    host: config.get('elasticsearch.url'),
    requestTimeout: 120000
    //log: 'trace'
  });
client.indices.stats({
  human: true,
  fields: ['docs', 'store']
  }, function (err, response) {
  console.log(response);
  });
}
```
