elasticesearch 第3.2章 HTTP操作-文档操作 elasticesearch 第3.2章 HTTP操作-文档操作

23小时前

一、创建文档

索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式。

在 Postman 中,向 ES 服务器发 POST 请求:

http://127.0.0.1:9200/shopping/_doc

请求体内容为:

{
 "title":"小米手机",
 "category":"小米",
 "images":"https://cyfb.lulublog.cn/images/3/2026/05/YsEGjoS9S1gJP8wwz9ZP8wjeWw1qy9.png",
 "price":3999.00
}

服务器响应结果如下:

https://cyfb.lulublog.cn/images/3/2026/05/Q2W31r520w398rZcr5198M774CP71w.png

{
 "_index"【索引】: "shopping",
 "_id"【唯一标识】: "F7U5Op4BKh5nBib7iICK", #可以类比为MySQL中的主键,随机生成
 "_version"【版本】: 1,
 "result"【结果】: "created", #这里的create表示创建成功
 "_shards"【分片】: {
   "total"【分片 - 总数】: 2,
   "successful"【分片 - 成功】: 1,
   "failed"【分片 - 失败】: 0
 },
 "_seq_no": 0,
 "_primary_term": 1
}

此处发送请求的方式必须为 POST,不能是 PUT,否则会发生错误

https://cyfb.lulublog.cn/images/3/2026/05/OHxIXHazhhj0zjUhm7A7M3hmah0Uhe.png

上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。

如果想要自定义唯一性标识,需要在创建时指定:

http://127.0.0.1:9200/shopping/_doc/1

请求体内容为:

{
 "title":"华为手机",
 "category":"华为",
 "images":"https://cyfb.lulublog.cn/images/3/2026/05/dZIEz2iYa12H1MRz1lp2SdIymZE8Hh.png",
 "price":4999.00
}

https://cyfb.lulublog.cn/images/3/2026/05/BQrDjdrjJm6MRbD6M5b357HbJDd7HD.png

此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT。

二、查看文档

查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询。

在 Postman 中,向 ES 服务器发 GET 请求:

http://127.0.0.1:9200/shopping/_doc/1

https://cyfb.lulublog.cn/images/3/2026/05/VUIG3IEDRZWwSqGbl5I5u5b7w33BiW.png

查询成功后,服务器响应结果:

{
 "_index"【索引】: "shopping",
 "_id": "1",
 "_version": 4,
 "_seq_no": 4,
 "_primary_term": 1,
 "found"【查询结果】: true, # true表示查找到,false表示未查找到
 "_source"【文档源信息】: {
   "title": "华为手机",
   "category": "华为",
   "images": "https://cyfb.lulublog.cn/images/3/2026/05/dZIEz2iYa12H1MRz1lp2SdIymZE8Hh.png",
   "price": 4999
 }
}

三、修改文档

和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖。

在 Postman 中,向 ES 服务器发 POST 请求:

http://127.0.0.1:9200/shopping/_doc/1

请求体内容为:

{
 "title":"华为手机",
 "category":"华为",
 "images":"https://cyfb.lulublog.cn/images/3/2026/05/dZIEz2iYa12H1MRz1lp2SdIymZE8Hh.png",
 "price":5000
}

修改成功后,服务器响应结果:

https://cyfb.lulublog.cn/images/3/2026/05/G51NMMXAFNVfVfzGbvAmfy55oM52B5.png

{
 "_index": "shopping",
 "_id": "1",
 "_version"【版本】: 5,
 "result"【结果】: "updated", # updated表示数据被更新
 "_shards": {
   "total": 2,
   "successful": 1,
   "failed": 0
 },
 "_seq_no": 5,
 "_primary_term": 1
}

四、修改字段

修改数据时,也可以只修改某一给条数据的局部信息。

在 Postman 中,向 ES 服务器发 POST 请求:

http://127.0.0.1:9200/shopping/_update/1

请求体内容为:

{
 "doc": {
   "price": 5001
 }
}

修改成功后,服务器响应结果:

https://cyfb.lulublog.cn/images/3/2026/05/KvnEv1jc818Z8eMyMmVkbVmgGmk8k1.png

根据唯一性标识,查询文档数据,文档数据已经更新

https://cyfb.lulublog.cn/images/3/2026/05/MW31fzAbK37aQB3azi7ppP3fkPkB7A.png

五、删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。

在 Postman 中,向 ES 服务器发 DELETE 请求:

http://127.0.0.1:9200/shopping/_doc/1

删除成功,服务器响应结果:

https://cyfb.lulublog.cn/images/3/2026/05/B1KdR2kQI5h4OVl3KT4qT2oi22DJ4E.png

{
 "_index": "shopping",
 "_id": "1",
 "_version"【版本】: 7, #对数据的操作,都会更新版本
 "result"【结果】: "deleted", # deleted表示数据被标记为删除
 "_shards": {
   "total": 2,
   "successful": 1,
   "failed": 0
 },
 "_seq_no": 7,
 "_primary_term": 1
}

删除后再查询当前文档信息:

https://cyfb.lulublog.cn/images/3/2026/05/ji9RHh38iHLeHa6zg7frlyrhA68g7r.png

如果删除一个并不存在的文档:

https://cyfb.lulublog.cn/images/3/2026/05/GcIZz4k5443Ol3FhmLENEmSiIH8o58.png

{
 "_index": "shopping",
 "_id": "1",
 "_version": 1,
 "result"【结果】: "not_found", # not_found表示未查找到
 "_shards": {
   "total": 2,
   "successful": 1,
   "failed": 0
 },
 "_seq_no": 8,
 "_primary_term": 1
}

六、条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除。

首先分别增加多条数据:

{
 "title":"小米手机",
 "category":"小米",
 "images":"https://cyfb.lulublog.cn/images/3/2026/05/YsEGjoS9S1gJP8wwz9ZP8wjeWw1qy9.png",
 "price":4000
}
{
 "title":"华为手机",
 "category":"华为",
 "images":"https://cyfb.lulublog.cn/images/3/2026/05/dZIEz2iYa12H1MRz1lp2SdIymZE8Hh.png",
 "price":4000
}

向 ES 服务器发 POST 请求:

http://127.0.0.1:9200/shopping/_delete_by_query

请求体内容为:

{
"query":{
 "match":{
  "price":4000
 }
}
}

删除成功后,服务器响应结果:

https://cyfb.lulublog.cn/images/3/2026/05/dq9ihrQHJY636XYrXwryqsMUY63upy.png

{
 "took"【耗时】: 342,
 "timed_out"【是否超时】: false,
 "total"【总数】: 2,
 "deleted"【删除数量】: 2,
 "batches": 1,
 "version_conflicts": 0,
 "noops": 0,
 "retries": {
   "bulk": 0,
   "search": 0
 },
 "throttled_millis": 0,
 "requests_per_second": -1,
 "throttled_until_millis": 0,
 "failures": []
}

阅读 26