目录
[2.1指定 _id 新增文档](#2.1指定 _id 新增文档)
[2.2由 ES 自动生成 _id](#2.2由 ES 自动生成 _id)
[3.1根据 _id 删除文档](#3.1根据 _id 删除文档)
[5.1根据 _id 查询(最快)](#5.1根据 _id 查询(最快))
一.概念
ES 的 CRUD 操作,本质上就是对索引中的 JSON 文档进行操作。
|--------------|-----------|
| 概念 | 类比关系型数据库 |
| Index(索引) | Database |
| Document(文档) | Row(一行数据) |
| Field(字段) | Column |
| _id | 主键 |
二.新增文档
2.1指定 _id 新增文档
PUT /user_index/_doc/1
{
"name": "张三",
"age": 25,
"city": "北京"
}
-
user_index:索引名 -
_doc:固定文档类型(7.x 之后已固定) -
1:文档 ID(主键) -
如果
_id=1不存在 → 新增 -
如果
_id=1已存在 → 覆盖(不是报错)
2.2由 ES 自动生成 _id
POST /user_index/_doc
{
"name": "李四",
"age": 30,
"city": "上海"
}
适用场景:
-
日志
-
行为数据
-
不关心主键
2.3只允许新增,不允许覆盖
PUT /user_index/_create/1
{
"name": "王五",
"age": 28
}
特点:
-
如果
_id已存在 → 直接报错 409 -
适合对数据一致性要求高的业务
三.删除文档
3.1根据 _id 删除文档
DELETE /user_index/_doc/1
3.2按条件批量删除
POST /user_index/_delete_by_query
{
"query": {
"term": {
"city": "北京"
}
}
}
提醒:
-
不可回滚
-
生产环境前一定先用
_search验证条件
四.修改文档
4.1全量更新
PUT /user_index/_doc/1
{
"name": "张三",
"age": 26
}
4.2局部更新
POST /user_index/_update/1
{
"doc": {
"age": 27
}
}
特点:
-
只更新指定字段
-
其他字段不受影响
-
内部仍是"读 → 改 → 写"
4.3脚本更新
POST /user_index/_update/1
{
"script": {
"source": "ctx._source.age += 1"
}
}
五.查询文档
5.1根据 _id 查询(最快)
GET /user_index/_doc/1
特点:
-
不走倒排索引
-
直接查主键
-
性能极高
5.2查询全部文档
GET /user_index/_search
5.3条件查询
精确匹配
GET /user_index/_search
{
"query": {
"term": {
"city": "北京"
}
}
}
全文搜索
GET /user_index/_search
{
"query": {
"match": {
"name": "张三"
}
}
}
5.4多条件组合(bool 查询)
GET /user_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "city": "北京" } }
],
"filter": [
{ "range": { "age": { "gte": 20 } } }
]
}
}
}