Elasticsearch——》_bulk

布满荆棘的人生 2024-03-22 00:52 173阅读 0赞

推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】

Elasticsearch——》_bulk

  • 一、概念
  • 二、操作类型
  • 三、步骤
  • 四、示例
    • 1、index
    • 2、create
    • 3、update
    • 4、delete
  • 五、注意

一、概念

Elasticsearch的_bulk API可以让用户一次性批量索引、更新或删除多个文档,以提高索引效率和性能。

二、操作类型

Elasticsearch的_bulk API支持四种不同的操作类型: index、create、update、delete。































操作类型 描述 备注
index 插入文档 如果该文档已经存在,则覆盖已有的文档
create 插入文档 如果该文档已经存在,则抛出异常
update 更新文档 如果该文档不存在,则抛出异常(如果指定doc_as_upsert,则插入文档)
delete 删除文档 如果该文档不存在,则抛出异常

三、步骤

  1. 创建一个包含“操作类型”和“文档数据”的批处理请求体
  2. 将请求体POST到/_bulk端点

四、示例

Bulk API的请求体必须遵循一定的格式规则:

  1. 每个操作必须是一行记录并以”\n”分割
  2. 每个操作前面必须包含一个操作类型(index、create、update、delete)
  3. 每个操作后面必须包含一个JSON格式的文档或文档更新语句(对于update、delete操作)
  4. 所有操作必须包含在一个JSON格式的对象中

1、index

  1. # 在"myindex"的索引中插入ID为1的文档,文档中包含一个字段"field1"
  2. POST _bulk
  3. {
  4. "index":{
  5. "_index":"myindex","_id":"1"}}
  6. {
  7. "field1":"value1"}

2、create

  1. # 在"myindex"的索引中插入ID为2的文档,文档中包含一个字段"field1"
  2. POST _bulk
  3. {
  4. "create":{
  5. "_index":"myindex","_id":"2"}}
  6. {
  7. "field1":"value1"}
  8. # 如果id为2的文档不存在,执行以上命令,则正常插入
  9. # 如果id为2的文档已存在,执行以上命令,则会抛出以下异常
  10. {
  11. "took": 0,
  12. "errors": true,
  13. "items": [
  14. {
  15. "create": {
  16. "_index": "myindex",
  17. "_id": "1",
  18. "status": 409,
  19. "error": {
  20. "type": "version_conflict_engine_exception",
  21. "reason": "[1]: version conflict, document already exists (current version [1])",
  22. "index_uuid": "Zc-GjYeEQeW6KpgnaqSBFA",
  23. "shard": "0",
  24. "index": "myindex"
  25. }
  26. }
  27. }
  28. ]
  29. }

3、update

  1. # 在"myindex"的索引中更新ID为3的文档,将"field2"字段更新为"value2"。
  2. POST _bulk
  3. {
  4. "update":{
  5. "_index":"myindex","_id":"3"}}
  6. {
  7. "doc":{
  8. "field2":"value2"}}
  9. # 如果id为3的文档已存在,执行以上命令,则正常更新
  10. # 如果id为3的文档不存在,执行以上命令,则抛出以下异常
  11. {
  12. "took": 2,
  13. "errors": true,
  14. "items": [
  15. {
  16. "update": {
  17. "_index": "myindex",
  18. "_id": "3",
  19. "status": 404,
  20. "error": {
  21. "type": "document_missing_exception",
  22. "reason": "[3]: document missing",
  23. "index_uuid": "-IEQ1U3kT1OQyewX551vIg",
  24. "shard": "0",
  25. "index": "myindex"
  26. }
  27. }
  28. }
  29. ]
  30. }
  31. # 在"myindex"的索引中更新ID为3的文档,将"field2"字段更新为"value2"。
  32. POST _bulk
  33. {
  34. "update":{
  35. "_index":"myindex","_id":"3"}}
  36. {
  37. "doc":{
  38. "field2":"value2"},"doc_as_upsert":true}
  39. # 如果id为3的文档已存在,执行以上命令,则正常更新
  40. # 如果id为3的文档不存在,执行以上命令,则正常插入

4、delete

  1. # 在"myindex"的索引中删除ID为1的文档
  2. POST _bulk
  3. {
  4. "delete":{
  5. "_index":"myindex","_id":"1"}}
  6. # 如果id为1的文档已存在,执行以上命令,则正常删除
  7. # 如果id为1的文档不存在,执行以上命令,不会抛出异常,但提示"not_found"
  8. {
  9. "took": 7,
  10. "errors": false,
  11. "items": [
  12. {
  13. "delete": {
  14. "_index": "myindex",
  15. "_id": "5",
  16. "_version": 1,
  17. "result": "not_found",
  18. "_shards": {
  19. "total": 2,
  20. "successful": 1,
  21. "failed": 0
  22. },
  23. "_seq_no": 5,
  24. "_primary_term": 1,
  25. "status": 404
  26. }
  27. }
  28. ]
  29. }

五、注意

_bulk API可以一次性处理多个操作,提高索引效率和性能。它在处理大批量数据的时候特别有用。需要注意的是使用Bulk API可能会对系统造成额外的负载和性能消耗,因此建议在非生产环境中先进行测试并仔细考虑实施策略。

发表评论

表情:
评论列表 (有 0 条评论,173人围观)

还没有评论,来说两句吧...

相关阅读