1.创建文档

:::success

  • 创建单个数据指定ID:使用_doc路由+PUT请求+id参数
  • 创建单个数据不指定ID:使用_doc路由+POST请求
  • 创建单个数据指定ID并进行ID唯一性控制:使用_doc路由+PUT请求+id参数+op_type=create参数
  • 创建批量数据指定ID:使用_bulk路由+PUT请求/POST请求+create关键字+_id属性
  • 创建批量数据不指定ID:使用_bulk路由+PUT请求/POST请求+create关键字 :::

    单个数据

    指定ID

    1. PUT /${indexName}/_doc/1
    2. {
    3. "name":"dog",
    4. "age":5
    5. }

    image.png

    不指定ID

    1. POST /${indexName}/_doc/
    2. {
    3. "name":"dog",
    4. "age":5
    5. }

    可以看到只有自动生成的文档ID
    image.png

    ID唯一性控制

    1. PUT /${indexName}/_doc/1?op_type=create
    2. {
    3. "name":"cat",
    4. "age":51
    5. }

    如图,增加了op_type=create的url参数,再次触发更新报错
    image.png

    批量数据

    指定ID

    1. PUT student/_bulk
    2. { "create":{ "_id": 1 } }
    3. { "name":"王乾雯","age":18,"dec":"she is so sex too"}
    4. { "create":{ "_id": 2 } }
    5. { "name":"宋可心","age":18,"dec":"she is so sex"}

    image.png

    不指定ID

    1. PUT student/_bulk
    2. { "create":{} }
    3. { "name":"郭楠","age":22,"dec":"she is good at sex"}
    4. { "create":{} }
    5. { "name":"王可菲","age":17,"dec":"she is so beautiful"}

    image.png

    2.修改文档

    :::success

  • 按照ID全量更新单个数据:使用_doc路由+PUT请求+id参数

  • 按照ID全量更新单个数据并进行乐观锁控制:使用_doc路由+PUT请求+if_seq_no&if_primary_term参数+id参数
  • 按照ID部分更新单个数据(包含属性添加):使用_update路由+POST请求+id参数
  • 按照ID全量更新批量数据:使用_bulk路由+PUT请求/POST请求+index关键字+_id属性
  • 按照ID部分更新批量数据(包含属性添加):使用_bulk路由+PUT请求/POST请求+update关键字+_id属性
  • 按照条件修改数据:使用_update_by_query路由+POST请求+ctx._source[‘字段名称’]=’字段值’;…..’
  • 按照条件给数据新增属性:使用_update_by_query路由+POST请求+ctx._source[‘字段名称’]=’字段值’;…..’
  • 按照条件给数据移除属性:使用_update_by_query路由+POST请求+ctx._source.remove(‘字段名称’);…..’ :::

    按照ID单个

    全量更新

    1. PUT /${indexName}/_doc/1
    2. {
    3. "name":"dog",
    4. "age":5
    5. }

    返回结果,可以看到本次执行的是修改操作,并且版本号进行了递增
    image.png

    基于乐观锁全量更新

    1. PUT /${indexName}/_doc/${id}?if_seq_no=${seqValue}&if_primary_term=${primaryTermValue}
    2. {
    3. "name":"pig",
    4. "age":100
    5. }

    第一次修改成功
    image.png
    再次修改,如图,提示乐观锁字段不一致,导致并发更新失败
    image.png

    部分更新

    1. POST student/_update/1
    2. {
    3. "doc":{
    4. "name":"冯铁城",
    5. "sex":1
    6. }
    7. }

    按照ID批量

    全量更新

    1. PUT student/_bulk
    2. { "index":{ "_id": 8 } }
    3. { "name":"lulu","age":19,"dec":"she has an sex feet"}
    4. { "index":{ "_id": 9 } }
    5. { "name":"宁娜","age":27,"dec":"she has an sex feet too"}

    image.png

    部分更新

    1. PUT student/_bulk
    2. { "update":{ "_id": 8 } }
    3. { "doc":{ "age":20,"dec":"she has an sex feet!i want fuck her!!!"}}
    4. { "update":{ "_id": 9 } }
    5. { "doc":{ "age":28,"dec":"she has an sex feet too!!ob my god!!!"}}

    image.png

    按照条件

    修改字段

    将姓名为冯铁城的学生描述改为超级无敌帅小伙,名称改为大帅哥冯铁城

    1. POST student/_update_by_query
    2. {
    3. "query": {
    4. "match": {
    5. "name": "冯铁城"
    6. }
    7. },
    8. "script": {
    9. "source": "ctx._source['des']='一个超级无敌帅小伙';ctx._source['name']='大帅哥冯铁城'",
    10. "lang": "painless"
    11. }
    12. }

    image.png

    增加字段

    姓名为夏洛的学生,增加标签字段,字段类型数组,字段元素大傻子

    1. POST student/_update_by_query
    2. {
    3. "query": {
    4. "match": {
    5. "name": "夏洛"
    6. }
    7. },
    8. "script": {
    9. "source": "ctx._source['tags']=['大傻子']",
    10. "lang": "painless"
    11. }
    12. }

    image.png

    移除字段

    移除姓名为夏洛的学生,des,name字段

    1. POST student/_update_by_query
    2. {
    3. "query": {
    4. "match": {
    5. "name": "夏洛"
    6. }
    7. },
    8. "script": {
    9. "source": "ctx._source.remove('des');ctx._source.remove('tags')",
    10. "lang": "painless"
    11. }
    12. }

    image.png

    3.删除文档

    :::success

  • 按照ID移除单个数据:使用_doc路由+DELETE请求+id参数

  • 按照ID移除批量数据:使用_bulk路由+PUT请求/POST请求+delete关键字+_id属性
  • 按照条件移除数据:使用_delete_by_query路由+POST请求
  • 需要注意的是,删除与更新一样,也会导致版本号+1。即使我们删除的文档不存在,版本号同样也会+1 :::

    按照ID单个

    DELETE /${indexName}/_doc/${id}
    image.png

    按照ID批量

    1. PUT student/_bulk
    2. { "delete":{"_id":"3C3ihoIBM0pUJCFIxl2q" } }
    3. { "delete":{"_id":"3S3ihoIBM0pUJCFIxl2q" } }

    按照条件

    1. POST student/_delete_by_query
    2. {
    3. "query":{
    4. "match_all":{}
    5. }
    6. }

    image.png

    4.查询文档

    :::success

  • 按照ID查询单个数据:使用_doc路由+GET请求+id参数

  • 按照ID查询批量数据:使用_mget路由+GET请求+ids参数
  • 按照ID校验数据是否存在:使用_doc路由+HEAD请求+id参数
  • 只查询部分字段:使用_source_includes/_source_excludes参数 :::

    按照ID单个

    GET ${indexName}/_doc/${id}
    image.png

    按照ID批量

    1. GET student/_mget
    2. {
    3. "ids":[8,9]
    4. }
    image.png

    按照ID校验文档是否存在

    HEAD ${indexName}/_doc/${id}
    存在
    image.png
    不存在
    image.png

    查询部分字段

    GET ${indexName}/_doc/${id}?_source_includes=${fieldName}…
    image.png