1. Cluster API
1.1 查看集群健康
GET /_cat/health?v
1.2 查看索引
GET /_cat/indices?v
2. Document API
2.1 增
2.1.1 单个文档
Index
指定ID时,如果ID不存在则创建新文档;如果ID存在,则先删除旧文档再创建新文档,并自增版本号。
PUT {index}/{type}/{id}
{
"field": "value",
...
}
# 自动生成ID,GUID 字符串。
POST {index}/{type}
# 指定routering参数,默认对ID进行Hash取模。
POST {index}/{type}?routing=xxx
Create
若ID已存在,则失败。
PUT {index}/{type}/{id}/_create
2.1.2 批量
见Bulk
2.2 删
所有更新操作,包括删除,会导致版本号增加。删除操作会被记录在.del文件,在检索返回前利用其对结果进行过滤。后台段合并操作时,会摒弃删除数据。
见:?refresh
2.2.1 单个删除
DELETE {index}/{type}/{id}
2.2.2 批量删除 delelte_by_query
根据查询条件删除,ES在删除前会创建快照,如果在执行删除期间文档发生改变导致内部版本不匹配,则不会删除该文档。
POST {index}/{type}/_delete_by_query
{
"query": {
...
}
}
2.3 改
ES支持局部更新和整体更新,但由于文档是不可变的,更新都是先删除旧文档再重新索引新文档,并自增版本号。ES使用_version作为乐观锁,如果在更新期间,文档被其它线程修改,将会导致更新失败。在无关顺序的增量操作场景下,可以使用retry_on_conflict参数来控制重试次数。
2.3.1 单个修改
局部更新
将doc中的字段覆盖现有文档的现有字段
POST {index}/{type}/{id}/_update
{
"doc":{
field to update...
}
}
结合script
脚本中,通过ctx前缀来访问_source、_index、_version等字段。source中可访问params中的变量,已使得ES可以复用脚本。
POST {index}/{type}/{id}/_update
{
"script" :{
"source" :"...",
"params" : {
param...
}
}
}
upsert
当文档不存在时,使用upserts中的字段创建新的文档。根据响应的result字段可得知created还是updated。
POST {index}/{type}/{id}/_update
{
"script" : "ctx._source.views+=1",
"upsert": {
"views": 1
}
}
2.3.2 批量修改 update_by_query
利用script对符合查询条件的文档进行更新,同delete_by_query,利用版本号进行并发控制。当遇到更新冲突时,会中断更新操作,但是并不会回滚已经被更新的文档。conflicts=proceed可以在发生冲突时,不打断更新进程。
POST {index}/{type}/_update_by_query
{
"script": {
...
},
"query": {
...
}
}
2.3 查
GET默认是实时操作,会触发一次刷新,将内存中的文档组合成段,使之可见。而Search是近实时,不会触发刷新,未刷新的数据不可见。
HAED 查看文