ElasticSearch:Kibana中DevTools的使用
DevTools
注:ElasticSearch里面有 index
和 type
的概念:index称为索引,type为文档类型,一个index下面有多个type,每个type的字段可以不一样。这类似于关系型数据库的 database 和 table 的概念。
实际使用中建议一个index
里面仅有一个type
,名称可以和index一致,或者使用固定的doc
。
节点操作
查看健康状态
GET /_cat/health?format=json
format=json
表示输出json格式,默认是文本格式。
健康状态有3种:
- Green - 正常(集群功能齐全)
- Yellow - 所有数据均可用,但尚未分配一些副本(群集功能齐全)
- Red - 某些数据由于某种原因不可用(群集部分功能可用)
注意:当群集为红色时,它将继续提供来自可用分片的搜索请求,但您可能需要尽快修复它,因为存在未分配的分片。
查看节点
GET /_cat/nodes?format=json
索引
创建index
PUT /customer
注:实际项目里一般是不会直接这样创建 index 的,这里仅为演示。一般都是通过创建 mapping 手动定义 index 或者自动生成 index 。
删除index
DELETE /customer
注:删除索引会把数据一并删除。实际操作请谨慎。
查看所有index
GET /_cat/indices?format=json
增删改查
ES文档有一些缺省字段,称之为Meta-Fields
,例如_index
、_type
、_id
等,查询文档的时候会返回。
按ID新增数据
type为doc:
PUT /customer/_doc/1
{
"name": "John Doe"
}
PUT /customer/_doc/2
{
"name": "yujc",
"age":22
}
如果索引index不存在,直接新增数据也会同时创建index。
按ID更新数据
PUT /customer/_doc/2
{
"name": "yujc2"
}
POST /customer/_doc/1
{
"name": "yujc2",
"age":22
}
name
字段会被修改,而且_version
会被修改为2。该操作实际是覆盖数据。
按ID查询数据
GET /customer/_doc/1
直接新增数据
我们也可以不指定文档ID从而直接新增数据:
POST /customer/_doc
{
"name": "yujc",
"age":23
}
注意这里使用的动作是
POST
。PUT
新增数据必须指定文档ID。
更新部分字段
如果只是想更新指定字段,必须使用POST
加参数的形式:
POST /customer/_doc/1/_update
{
"doc":{
"name": "John"}
}
其中_update
表示更新。Json里doc
必须有,否则会报错。
增加字段
在已有的数据基础上增加一个year
字段,不会覆盖已有数据
POST /customer/_doc/1/_update
{
"doc":{
"year": 2018}
}
也可以使用简单脚本执行更新。此示例使用脚本将年龄增加5:
POST /customer/doc/1/_update
{
"script":"ctx._source.age+=5"
}
按ID删除数据
DELETE /customer/_doc/1
查询指定 Index 的 mapping
GET /customer/_mapping
批量操作
批量创建
POST /customer/_doc/_bulk
{
"index":{
"_id":"3"}}
{
"name": "John Doe3" }
{
"index":{
"_id":"4"}}
{
"name": "Jane Doe4" }
该操作会新增2条记录,其中文档第1行和第3行提供的是要操作的文档id,第2行和第4行是相应的源文档,即数据内容。这里对文档的操作是index
,也可以是create
,二者都是创建文档,只是如果文档已存在,index
会覆盖,create
会失败。
批量更新、删除
POST /customer/_doc/_bulk
{
"update":{
"_id":"1"}}
{
"doc": {
"name": "John Doe becomes Jane Doe" } }
{
"delete":{
"_id":"2"}}
该操作会更新ID为1的文档,删除ID为2的文档。对于删除操作,之后没有相应的源文档,因为删除只需要删除文档的ID。
注意:批量操作如果某条失败了,并不影响下一条继续执行。
按条件更新
curl -X POST
http://127.0.0.1:9200/test/_doc/_update_by_query
-H "Content-Type: application/json"
-d '{"script":{"source":"ctx._source[\"is_pub\"]=1"},"query":{"match_all":{}}}'
这个示例的含义是将文档test/_doc
的所有文档的is_pub
字段设置为1。
按条件删除
curl -X POST
http://127.0.0.1:9200/test/doc/_delete_by_query
-H "Content-Type: application/json"
-d '{"query":{"bool":{"filter":{"range":{"id