文档的操作
总结
- 文档 CRUD 都是 REST 风格,PUT 指定 ID,POST 自动生成 ID
_update是局部更新,只改传入的字段;直接 PUT 是全量替换script支持动态更新,可以做条件判断和字段增删
1. 查询文档
查单个
GET localhost:9200/nba/_doc/1
批量查(跨索引)
POST localhost:9200/_mget
{
"docs": [
{ "index": "nba", "_id": "1" },
{ "index": "nba", "_id": "2" }
]
}
批量查(同一索引)
POST localhost:9200/nba/_mget
{
"docs": [
{ "_id": "1" },
{ "_id": "2" }
]
}
也可以直接用 ids 简写:
{ "ids": ["1", "2"] }
2. 新增文档
指定 ID(ID 已存在会覆盖)
PUT localhost:9200/nba/_doc/1
指定 ID,防止覆盖(ID 已存在会报错)
PUT localhost:9200/nba/_doc/1?op_type=create
自动生成 ID
POST localhost:9200/nba/_doc
{
"name": "哈登",
"team_name": "火箭",
"position": "得分后卫",
"play_year": "10",
"jerse_no": "13"
}
3. 修改文档
3.1 局部更新
只更新传入的字段,其他字段不动:
POST localhost:9200/nba/_update/1
{
"doc": {
"position": "控球后卫"
}
}
3.2 用 script 更新
动态新增字段
{
"script": "ctx._source.age = 18"
}
删除字段
{
"script": "ctx._source.remove('age')"
}
条件更新(带 upsert)
文档不存在时 age 初始化为 1,存在时 age += 4:
{
"script": {
"source": "ctx._source.age += params.age",
"params": {
"age": 4
}
},
"upsert": {
"age": 1
}
}
4. 删除文档
DELETE localhost:9200/nba/_doc/1
6. 面试相关
文档是 ES 操作的基本单元,如果你被问到文档的读写原理,可以重点准备 ES面试题 中的写入原理、搜索原理相关问题。