文档操作-增删改
Salted Fish 1991/6/26 基础
# 1. 单条添加
# 不指定ID添加
curl -XPOST "http://elasticsearch:9200/test_db/_doc" -H 'Content-Type: application/json' -d'{
"name":"张三",
"age":18,
"score":81.5,
"birth":"1992-04-12",
"isBoy":"true",
"home":"北京天安门鼓楼大街103号",
"likes":[
"旅游",
"玩游戏"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 指定ID添加
# 指定id=2
curl -XPOST "http://elasticsearch:9200/test_db/_doc/2" -H 'Content-Type: application/json' -d'{
"name":"李四",
"age":28,
"score":75,
"birth":"1991-03-18",
"isBoy":"true",
"home":"安徽省合肥市瑶海区中兴街143号",
"likes":[
"吃饭",
"喝酒"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2. 单条修改
# 根据ID修改全部字段
# 覆盖id=2的所有字段内容
curl -XPOST "http://elasticsearch:9200/test_db/_doc/2" -H 'Content-Type: application/json' -d'{
"name":"李四2",
"age":38,
"score":70,
"birth":"1991-03-14",
"isBoy": "true",
"home":"安徽省合肥市瑶海区中兴街143090号",
"likes":["吃肉","喝酒"]
}'
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 根据ID修改部分字段
curl -XPOST "http://elasticsearch:9200/test_db/_doc/12/_update" -H 'Content-Type: application/json' -d'{
"doc":{
"name":"王大夫-修改"
}
}'
1
2
3
4
5
2
3
4
5
# 根据其他条件修改
# 修改name=西施记录的 home字段信息
curl -XPOST "http://elasticsearch:9200/test_db/_update_by_query" -H 'Content-Type: application/json' -d'{
"query":{
"match":{
"name":"西施"
}
},
"script":{
"source":"ctx._source.home = \"春秋末期越国美人大街2号\""
}
}'
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3. 单条删除
# 删除指定ID的记录
# 删除ID=1的记录
curl -XDELETE "http://elasticsearch:9200/test_db/_doc/1"
1
2
2
# 删除满足条件的记录
# 删除 name=赵东 的所有记录
curl -XPOST "http://elasticsearch:9200/test_db/_delete_by_query" -H 'Content-Type: application/json' -d'{
"query":{
"match":{
"name":"赵东"
}
}
}'
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4.批量操作
批量操作可以减少网络连接所产生的开销,提升性能
支持在一次API调用中,对不同的索引进行操作
可以在URI中指定Index,也可以在请求的Payload中进行
操作中单条操作失败,并不会影响其他操作
返回结果包括了每一条操作执行的结果
批量对文档进行写操作是通过_bulk的API来实现的
请求方式:POST
请求地址:_bulk
请求参数:通过_bulk操作文档,一般至少有两行参数(或偶数行参数)
第一行参数为指定操作的类型及操作的对象(index,type和id)
第二行参数才是操作的数据
参数类似于
{"actionName":{"_index":"indexName", "_type":"typeName","_id":"id"}} {"field1":"value1", "field2":"value2"} #actionName:表示操作类型,主要有create,index,delete和update1
2
3
4
# 5. 批量添加
# 批量创建文档
# 批量添加语法
POST _bulk
{"create":{"_index":"article","_id":3}}
{"id":3,"title":"fox老师","content":"老师666","tags":["java", "面向对象"],"create_time":1554015482530}
{"create":{"_index":"article", "_id":4}}
{"id":4,"title":"mark老师","content":"老师NB","tags":["java", "面向对象"],"create_time":1554015482530}
1
2
3
4
5
6
2
3
4
5
6
# 普通创建或全量替换index
POST _bulk
{"index":{"_index":"article", "_id":3}}
{"id":3,"title":"张三老师","content":"老师888","tags":["java", "面向对象"],"create_time":1554015482530}
{"index":{"_index":"article", "_id":4}}
{"id":4,"title":"李四老师","content":"老师888","tags":["java", "面向对象"],"create_time":1554015482530}
#如果原文档不存在,则是创建,如果原文档存在,则是替换(全量修改原文档)
1
2
3
4
5
6
7
2
3
4
5
6
7
curl -XPOST "http://elasticsearch:9200/test_db/_bulk" -H 'Content-Type: application/json' -d'{"create":{"_type":"_doc","_id":12}}{"name":"王大夫","age":33,"score":30,"birth":"1980-12-13","isBoy":"true","home":"河南省莆田系中山医院正骨科10层","likes":["吸烟","烫头"]}{"create":{"_type":"_doc","_id":13}}{"name":"将太白","age":47,"score":88,"birth":"1979-09-22","isBoy":"true","home":"湖南省东佃风场找不到大街808号","likes":["喝酒","吃肉"]}'
1
# 6. 批量修改
POST _bulk
{"update":{"_index":"article", "_id":3}}
{"doc":{"title":"ES从入门到放弃"}}
{"update":{"_index":"article", "_id":4}}
{"doc":{"create_time":1654018421008}}
1
2
3
4
5
2
3
4
5
# 7. 批量删除
POST _bulk
{"delete":{"_index":"article", "_id":3}}
{"delete":{"_index":"article", "_id":4}}
1
2
3
2
3
# 8. 组合应用
POST _bulk
{"index":{"_index":"article", "_id":3}}
{"id":3,"title":"悟空老师","content":"悟空老师666","tags":["java", "面向对象"],"create_time":1554015482530}
{"delete":{"_index":"article", "_id":3}}
{"update":{"_index":"article", "_id":4}}
{"doc":{"create_time":1654018421008}}
1
2
3
4
5
6
2
3
4
5
6