一、文档的创建
| 序号 | 语句 | 特性描述 |
|---|---|---|
| 1 | PUT /books/_doc/1 | 如果文档存在,会先删除在写入,即有覆盖原内容的功能 |
| 2 | PUT books/_create/2 | Create API 中使用 PUT 的方式创建文档,需要指定文档 ID。如果文档已经存在,则返回 http 409 错误。 |
| 3 | POST books/_doc | Create API 中使用 POST 的方式,不需要指定文档 ID, 系统自动生成。 |
上表是新建文档的3种方式,如果是更新文档,则应该使用第一种方式.如果是校验id是否存在,则采用第二种方式,如果是不指定id,则采用第三种方式
第一种指定id写入,es会在库里查询id是否存在,所以相对第三种方式不指定id效率会相对较低
二、文档的获取
# 1)单个文档的获取
获取book索引中id为1的文档
GET /books/_doc/1
# 2)批量文档获取
GET /books/_mget
{
"ids":["1","2"]
}
三、文档更新
更新某个具体的字段 方式一:
POST /books/_update/1
{
"doc": {
"name":"更新test",
"intro":"更新简介"
}
}
如果query的文档数量巨大,这个接口可能会发生超时的错误,当然可以使用timeout参数,但是不能解决问题的有效方式,最好的方式是通过异步的形式 更新某个具体的字段 方式二:
POST /books/_update_by_query
{
"query": {
"term": {
"book_id": {
"value": "ssaascw"
}
}
},
"script": {
"source": "ctx._source.name='update by query'"
, "lang": "painless"
}
}
异步更新文档 方式三:
POST /books/_update_by_query?wait_for_completion=false
{
"query": {
"term": {
"book_id": {
"value": "ssaascw"
}
}
},
"script": {
"source": "ctx._source.name='update by query 异步的方式'"
, "lang": "painless"
}
}
四、文档删除
删除单个文档
方式一
DELETE books/_doc/2
方式二
POST /books/_delete_by_query
{
"query":{
"term":{
"book_id":"ssbhvxzs"
}
}
}