文档操作-增删改

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
# 指定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. 单条修改

# 根据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
# 根据ID修改部分字段
curl -XPOST "http://elasticsearch:9200/test_db/_doc/12/_update" -H 'Content-Type: application/json' -d'{
  "doc":{
    "name":"王大夫-修改"
  }
}'
1
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

# 3. 单条删除

# 删除指定ID的记录
# 删除ID=1的记录
curl -XDELETE "http://elasticsearch:9200/test_db/_doc/1"
1
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

# 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和update
    
    1
    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
# 普通创建或全量替换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
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

# 7. 批量删除

POST _bulk
{"delete":{"_index":"article",  "_id":3}}
{"delete":{"_index":"article",  "_id":4}}
1
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