tnblog
首页
视频
资源
登录

Elasticsearch 文档的基本CRUD与批量操作

5876人阅读 2020/8/23 16:36 总访问:3657622 评论:1 收藏:1 手机
分类: 云产品

elasticsearch

Elasticsearch 文档的基本CRUD与批量操作


文档的 CRUD

Index PUT my_index/_doc/1
{“user”:”mike”,”comment”:”You know,for future”}
Create PUT my_index/_create/1
{“user”:”mike”,”comment”:”You know,for future”}
POST my_index/_doc(不指定ID,自动生成)
{“user”:”mike”,”comment”:”You know,for search”}
Read Get my_index/_doc/1
Update POST my_index/_update/1
{ “doc”:{“user”:”mike”,”comment”:”You know,for search”}}
Delete Delete my_index/_doc/1
  • Type 名,约定都用 _doc
  • Create - 如果ID已经存在,会失败
  • Index - 如果ID不存在,创建新的文档。否则,先删除现有的文档,再创建新的文档,版本会增加
  • Update - 文档必须已经存在,更新只会对相应字段做增量修改

Create 一个文档

  1. PUT users/_create/1
  2. {
  3. "user" : "Jack",
  4. "post_date" : "2020-08-23T14:40:12",
  5. "message" : "trying out Elasticsearch"
  6. }

第一次调用

第二次调用

小结

  • 支持自动生成文档ID和指定文档ID两种方式
  • 通过调用 post /users/_doc
    • 系统会自动生成 document id
  • 使用 HTTP PUT user/_create/1 创建时,URL中显示指定_create,此时如果该id已经存在,操作失败。

Get 一个文档

  1. GET users/_doc/1

获取一个文档信息

小结

  • 找到文档,返回 HTTP 200
    • _index/_type/
    • 版本信息,同一个ID的文档,即使被删除,Version 号也会不断增加
    • _scourc 中默认包含了文档的所有原始信息
  • 找不到文档,返回 HTTP 404

Index 文档

  1. PUT users/_doc/1
  2. {
  3. "user" : "Bob He(MinYang He)"
  4. }

  • Index 和 Create 不一样的地方:如果文档不存在,就索引新的文档。否则现有的文档会被删除,新的文档被索引。版本信息 +1。

Update 文档

  1. POST users/_update/1
  2. {
  3. "doc" : {
  4. "albums":["Album1","Album2"]
  5. }
  6. }

  • Update 方法不会删除原有的文档,而是实现真正的数据更新。
  • POST 方法 /PayLoad 需要包含在”doc”中

Bulk API

  1. #执行第1次
  2. POST _bulk
  3. { "index" : { "_index" : "test", "_id" : "1" } }
  4. { "field1" : "value1" }
  5. { "delete" : { "_index" : "test", "_id" : "2" } }
  6. { "create" : { "_index" : "test2", "_id" : "3" } }
  7. { "field1" : "value3" }
  8. { "update" : {"_id" : "1", "_index" : "test"} }
  9. { "doc" : {"field2" : "value2"} }


  • 支持一次API调用中,对不同的索引进行操作
  • 支持四种类型操作
    • index
    • Create
    • Update
    • Delete
  • 可以在URL中指定Index,也可以在请求的Payload中进行
  • 操作中单条操作失败,并不会影响其他操作
  • 返回结果包括了每一条操作执行的结果

批量读取 mget

  1. GET /_mget
  2. {
  3. "docs" : [
  4. {
  5. "_index" : "test",
  6. "_id" : "1"
  7. },
  8. {
  9. "_index" : "test",
  10. "_id" : "2"
  11. }
  12. ]
  13. }

批量操作,可以减少网络链接所产生的开销,提高性能。

批量查询 - msearch

  1. POST kibana_sample_data_ecommerce/_msearch
  2. {}
  3. {"query" : {"match_all" : {}},"size":1}
  4. {"index" : "kibana_sample_data_flights"}
  5. {"query" : {"match_all" : {}},"size":2}

完整Demo

  • Create Document (auto ID generate)
  • Get Document By Id
  • Create Document (指定ID)
  • Index Document
  • Update Document
  1. ############Create Document############
  2. #create document. 自动生成 _id
  3. POST users/_doc
  4. {
  5. "user" : "Mike",
  6. "post_date" : "2019-04-15T14:12:12",
  7. "message" : "trying out Kibana"
  8. }
  9. #create document. 指定Id。如果id已经存在,报错
  10. PUT users/_doc/1?op_type=create
  11. {
  12. "user" : "Jack",
  13. "post_date" : "2019-05-15T14:12:12",
  14. "message" : "trying out Elasticsearch"
  15. }
  16. #create document. 指定 ID 如果已经存在,就报错
  17. PUT users/_create/1
  18. {
  19. "user" : "Jack",
  20. "post_date" : "2019-05-15T14:12:12",
  21. "message" : "trying out Elasticsearch"
  22. }
  23. ### Get Document by ID
  24. #Get the document by ID
  25. GET users/_doc/1
  26. ### Index & Update
  27. #Update 指定 ID (先删除,在写入)
  28. GET users/_doc/1
  29. PUT users/_doc/1
  30. {
  31. "user" : "Mike"
  32. }
  33. #GET users/_doc/1
  34. #在原文档上增加字段
  35. POST users/_update/1/
  36. {
  37. "doc":{
  38. "post_date" : "2019-05-15T14:12:12",
  39. "message" : "trying out Elasticsearch"
  40. }
  41. }
  42. ### Delete by Id
  43. # 删除文档
  44. DELETE users/_doc/1
  45. ### Bulk 操作
  46. #执行两次,查看每次的结果
  47. #执行第1次
  48. POST _bulk
  49. { "index" : { "_index" : "test", "_id" : "1" } }
  50. { "field1" : "value1" }
  51. { "delete" : { "_index" : "test", "_id" : "2" } }
  52. { "create" : { "_index" : "test2", "_id" : "3" } }
  53. { "field1" : "value3" }
  54. { "update" : {"_id" : "1", "_index" : "test"} }
  55. { "doc" : {"field2" : "value2"} }
  56. #执行第2次
  57. POST _bulk
  58. { "index" : { "_index" : "test", "_id" : "1" } }
  59. { "field1" : "value1" }
  60. { "delete" : { "_index" : "test", "_id" : "2" } }
  61. { "create" : { "_index" : "test2", "_id" : "3" } }
  62. { "field1" : "value3" }
  63. { "update" : {"_id" : "1", "_index" : "test"} }
  64. { "doc" : {"field2" : "value2"} }
  65. ### mget 操作
  66. GET /_mget
  67. {
  68. "docs" : [
  69. {
  70. "_index" : "test",
  71. "_id" : "1"
  72. },
  73. {
  74. "_index" : "test",
  75. "_id" : "2"
  76. }
  77. ]
  78. }
  79. #URI中指定index
  80. GET /test/_mget
  81. {
  82. "docs" : [
  83. {
  84. "_id" : "1"
  85. },
  86. {
  87. "_id" : "2"
  88. }
  89. ]
  90. }
  91. GET /_mget
  92. {
  93. "docs" : [
  94. {
  95. "_index" : "test",
  96. "_id" : "1",
  97. "_source" : false
  98. },
  99. {
  100. "_index" : "test",
  101. "_id" : "2",
  102. "_source" : ["field3", "field4"]
  103. },
  104. {
  105. "_index" : "test",
  106. "_id" : "3",
  107. "_source" : {
  108. "include": ["user"],
  109. "exclude": ["user.location"]
  110. }
  111. }
  112. ]
  113. }
  114. ### msearch 操作
  115. POST kibana_sample_data_ecommerce/_msearch
  116. {}
  117. {"query" : {"match_all" : {}},"size":1}
  118. {"index" : "kibana_sample_data_flights"}
  119. {"query" : {"match_all" : {}},"size":2}
  120. ### 清除测试数据
  121. #清除数据
  122. DELETE users
  123. DELETE test
  124. DELETE test2

常见问题错误

问题 原因
无法连接 网络故障或集群内部出现问题
连接无法关闭 网络故障或节点出错
429 集群处于非常繁忙的状态,所以 Elasticsearch 无法处理当前的一些请求。我们可以尝试重试的方式或对Elasticsearch添加新的节点提高吞吐量
4xx 请求体格式有错
500 集群内部错误

在请求API的时候也不要一次性发送过多的数据,因为这有可能导致Elasticsearch产生过大的压力反而造成性能的下降


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

bk

2020/8/24 10:03:18

[good][good][good]

Elasticsearch 安装与部署

Elasticsearch 安装与部署[TOC] 环境准备 Java 8.0以上的环境本机环境为Mac,Java 14.0.2 获取 Elasticsearch 安装包 ...

Docker运行 Elasticsearch Kibana和Cerebro

Docker运行 Elasticsearch Kibana和Cerebro[TOC] Demo 运行 Docker-compose,本地构建更高效的开发环境,更直观地了解 El...

Elasticsearch 基本概念:索引、文档和REST API

Elasticsearch 基本概念:索引、文档和REST API[TOC] 前言 为了了解 Elasticsearch 如何构成,我们首先需要理解索引(I...

Elasticsearch 基本概念:节点、集群、分片及副本

Elasticsearch 基本概念:节点、集群、分片及副本[TOC] 分布式系统的可用性与扩展性 高可用性 服务可用性 - 允许有节...

Elasticsearch 倒排索引(运用Analyzer进行分词)

Elasticsearch 倒排索引[TOC] 正排与倒排索引 我们以一本书为例子,一本书的目录为正排索引,它将排列整本书的主要大纲...

Elasticsearch Search API概览

Elasticsearch Search API概览[TOC] Search API 通过搜索获取的数据方式有两种。 URL Search 在URL中使用查询参数...

Elasticsearch URL Search详解

Elasticsearch URL Search详解[TOC] 通过 URL Query 实现搜索举例: Get /movies/_search?q=2020&df=title&sort...

Elasticsearch Request Body与Query DSL简介

Elasticsearch Request Body与Query DSL简介[TOC] Request Body Search 将查询语句通过 HTTP Resquest Body 发送给 Ela...

Elasticsearch 显式Mapping设置与常见参数介绍

Elasticsearch 显式Mapping设置与常见参数介绍[TOC] 如何显示的定义一个MappingPut movies { "mappings" ...

Elasticsearch 多字段特性及Mapping中配置自定义Analyzer

Elasticsearch 多字段特性及Mapping中配置自定义Analyzer[TOC] 多字段类型多字段特性 厂家名字可以实现精确匹配,增加一...

Elasticsearch Index Template 和 Dynamic Template

Elasticsearch Index Template和Dynamic Template[TOC] 什么是 Index Template 可以通过一定的规则去设定 Mappings 和 Se...

Elasticsearch 聚合分析简介

Elasticsearch 聚合分析简介[TOC] 什么是聚合(Aggregation) 聚合:对有关的数据进行内容挑选、分析、归类(筛选),最...

Elasticsearch 基于词项和基于全文的搜索

Elasticsearch 基于词项和基于全文的搜索[TOC] 基于 Term 的查询Term 的重要性Term 是表达语意的最小单位。搜索和利用语言...

.NET Core使用Elasticsearch 一:windows安装Elasticsearch与kibana

一:安装java环境ElasticSearch是基于Java的所以先要安装Java,dkj,当然下载的ElasticSearch也带得也jkd也可以使用那个。下...

.NET Core使用Elasticsearch 二:CORE操作ES基础环境与简单查询

Elasticsearch使用版本7.12.0安装Elasticsearch与kibana可以参考:https://www.tnblog.net/aojiancc2/article/details/5875...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术