本文基于 ELK 6.7 版本进行测试验证,如果你的版本不一致,可能需要稍微调整相关语法。
在 Elasticsearch 日常维护过程中,很多信息、配置和临时的调整都可以通过命令行的方式操作生效,不必通过配置文件修改,这就要求我们运维人员对于常用的 API 比较熟悉。本文整理了 elasticsearch 日常运维过程中常用的 API,详细说明如果通过 curl 命令来调用这些API。
[TOC]
集群信息
- 查看集群描述和集群版本
1 | $ curl -XGET http://localhost:9203 |
- 检查集群的健康状态
1 | $ curl -XGET http://192.18.8.7:9203/_cat/health?v |
- 获取集群节点
1 | $ curl -XGET http://192.18.8.7:9203/_cat/nodes?v |
- 获取集群配置
1 | $ curl -XGET http://localhost:9203/_cluster/settings |
索引相关
- 查看索引信息。
1 | $ curl -XGET http://localhost:9201/_cat/indices?v |
- 查看索引配置
1 | $ curl -XGET http://localhost:9201/xxx/_settings |
文档相关
- 查询索引
1 | $ curl -XGET http://localhost:9202/kibana_sample_data_logs/_search?pretty |
- 添加一条文档
1 | $ curl -XPOST http://localhost:9202/student/_doc/2 |
- 查询索引中的一条具体信息
1 | ``` |
返回结果
1 | { |
上面的例子,如果索引不存在,则会自动创建索引及动态映射关系。如果想要关掉这两个特性,可以修改节点上配置文件中
action.auto_create_index
以及index.mapper.dynamic
两项的值为 false。
使用这个API发送两次请求,即便插入的数据一模一样,仍然会在索引中创建两个文档。如果不能接受这个结果,那就需要使用 _update API,并将
detect_noop
参数打开。
2、GET API 获取文档
该API能够基于文档ID获取一份格式化的JSON文档。除了支持通过GET获取文档信息,也支持通过HEAD方法检查文档是否存在。
1 | curl -XGET 'localhost:9200/twitter/tweet/0?pretty' |
返回结果如下
1 | { |
3、* Delete API 删除文档 *
该API允许我们根据ID删除某个索引中的文档。
1 | curl -XDELETE 'localhost:9200/twitter/tweet/1?pretty' |
结果如下
1 | { |
删除文档时,如果该索引不存在,则Elasticsearch会自动创建索引和自动映射关系。这个官方文档中有这个文字,但是我自己实验的却没有这样的结果,而是收到 index_not_found_exception 的错误。
4、* Delete By Query API 根据条件删除 *
该API会对满足查询条件的所有文档执行删除操作。示例如下
1 | curl -XPOST 'localhost:9200/twitter/_delete_by_query?pretty' -H 'Content-Type: application/json' -d' |
返回结果
1 | { |
该API接受的URL参数pretty
、refresh
、wait_for_completion
、wait_for_active_shards
、timeout
。如果想要获取正在执行的删除人物,可以通过Task API。
1 | curl -XGET 'localhost:9200/_tasks?detailed=true&actions=*/delete/byquery&pretty' |
也可以对删除操作进行取消。
1 | curl -XPOST 'localhost:9200/_tasks/task_id:1/_cancel?pretty' |
5、* Update API 更新API *
我觉得这是很多人对ELK误解最深的地方,以为ELK不支持更新功能,数据只能一次性导入,其实ELK是有更新API的。更新API首先从ES获取文档,然后根据请求对文档进行更新,最后将更新保存至服务器。这个过程中使用版本号 Version 来确保文档没有被其他人修改过。
1 | curl -XPUT 'localhost:9200/test/type1/1?pretty' -H 'Content-Type: application/json' -d' |
也可以通过Script进行更新
1 | curl -XPOST 'localhost:9200/test/type1/1/_update?pretty' -H 'Content-Type: application/json' -d' |
6、* Update by Query API 根据条件更新 *
类似于根据条件查询,这个API可以根据条件对多个文档进行更新。
1 | curl -XPOST 'localhost:9200/twitter/_update_by_query?conflicts=proceed&pretty' -H 'Content-Type: application/json' -d' |
多文档操作API
1、* MULTI GET API 获取多个文档*
MULTI GET API允许我们根据索引、类型和ID来获取多个文档,返回结果放在docs数组中。
1 | curl -XGET 'localhost:9200/_mget?pretty' -H 'Content-Type: application/json' -d' |
2、BULK API
BULK API提供了在一次请求中更新大量文档的可能,这将极大的提高索引的速度。
3、Reindex API 重建索引
1 |
|
3、Term Vectors
TODO 待补充
4、Multi termvectors API
TODO 待补充
5、**?refresh**
TODO 待补充
本文所有示例基于ELK 5.6。