程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 搜索数据库 - ElasticSearch

    • ElasticSearch - 基础概念
    • ElasticSearch - 安装
    • ElasticSearch - 索引操作
    • ElasticSearch - 映射操作
    • ElasticSearch - 文档操作
      • 1. 创建文档 (POST 请求)
        • Postman 操作
        • 自定义文档 ID
        • Kibana 操作
      • 2. 查看文档 (GET 请求)
        • Postman 操作
        • Kibana 操作
      • 3. 修改文档 (POST 请求)
        • 覆盖式更新
        • Postman 操作
        • Kibana 操作
      • 4. 修改文档的字段 (POST 请求)
        • 非覆盖式更新
        • Postman 操作
        • Kibana 操作
      • 5. 删除文档 (DELETE 请求)
        • Postman 操作
        • Kibana 操作
      • 6. 条件删除文档 (POST 请求)
        • Postman 操作
        • Kibana 操作
      • 7. 总结
    • ElasticSearch - 高级操作
    • ElasticSearch - 倒排索引
    • ElasticSearch - 分词器
    • ElasticSearch - Java操作
    • ElasticSearch - 多框架集成
    • ElasticSearch - 搭建集群
    • ElasticSearch - 进阶概念
    • ElasticSearch - 分布式集群和路由计算
    • ElasticSearch - 分片控制流程
    • ElasticSearch - 分片操作原理
    • ElasticSearch - 多种分析器
    • ElasticSearch - 冲突问题处理
    • ElasticSearch - 进阶优化
    • ElasticSearch - 面试题
  • 搜索数据库 - ElasticSearch
  • 搜索数据库 - ElasticSearch
scholar
2024-09-16
目录

ElasticSearch - 文档操作

# ElasticSearch - 文档基本操作

  • 1. 创建文档 (POST 请求)
    • Postman 操作
    • 自定义文档 ID
    • Kibana 操作
  • 2. 查看文档 (GET 请求)
    • Postman 操作
    • Kibana 操作
  • 3. 修改文档 (POST 请求)
    • 覆盖式更新
    • Postman 操作
    • Kibana 操作
  • 4. 修改文档的字段 (POST 请求)
    • 非覆盖式更新
    • Postman 操作
    • Kibana 操作
  • 5. 删除文档 (DELETE 请求)
    • Postman 操作
    • Kibana 操作
  • 6. 条件删除文档 (POST 请求)
    • Postman 操作
    • Kibana 操作
  • 7. 总结

格式:http://127.0.0.1:9200/索引名/文档名


# 1. 创建文档 (POST 请求)

Elasticsearch 的文档可以类比为关系型数据库中的表数据。在 Elasticsearch 中,文档的数据格式为 JSON 格式。通过 POST 请求,可以向 Elasticsearch 中创建一个新的文档。

# Postman 操作

操作目的:向已经存在的索引中添加一个文档(即一条数据)。

  • 请求 URL: http://127.0.0.1:9200/shopping/_doc
  • 请求方法: POST
  • 数据格式: JSON

操作步骤:

  1. 打开 Postman,选择 POST 请求方法。
  2. 在 URL 栏中输入 http://127.0.0.1:9200/shopping/_doc,其中 shopping 是索引名,_doc 表示文档类型。
  3. 在请求体中输入如下 JSON 数据,该文档包含 title、category、images 和 price 字段,表示一个商品的基本信息。
  4. 点击发送请求按钮。

请求体内容为:

{
    "title":"小米手机",
    "category":"小米",
    "images":"http://www.gulixueyuan.com/xm.jpg",
    "price":3999.00
}
1
2
3
4
5
6

发送请求的截图如下:

image-20211114194141969

注意事项:发送请求的方式必须为 POST,不能为 PUT,否则会返回错误,因为 POST 用于新建文档,而 PUT 用于指定 ID 的更新或创建。

服务器响应结果说明:

{
    "_index【索引】": "shopping",      // 表示文档所属的索引名称
    "_type【类型-文档】": "_doc",      // 表示文档的类型
    "_id【唯一标识】": "Xhsa2ncBlvF_7lxyCE9G",  // 文档的唯一 ID,自动生成
    "_version【版本】": 1,              // 文档的版本号,首次创建为 1
    "result【结果】": "created",        // 表示文档成功创建
    "_shards【分片】": {
        "total【分片 - 总数】": 2,      // 索引分片的总数
        "successful【分片 - 成功】": 1, // 成功分配的分片数
        "failed【分片 - 失败】": 0      // 失败分配的分片数
    },
    "_seq_no": 0,
    "_primary_term": 1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

响应结果截图如下:

image-20211114194227988

  • _id: 这里 Xhsa2ncBlvF_7lxyCE9G 是文档的唯一 ID,Elasticsearch 自动生成,类似于 MySQL 中的主键。
  • result: 返回 "created" 表示文档创建成功。
  • _version: 表示该文档的版本号,首次创建时版本号为 1。
  • _shards: 表示该文档所在的分片情况,总分片数为 2,成功分片为 1,失败分片为 0。

# 自定义文档 ID

您还可以自定义文档的唯一标识符(ID),在 URL 中指定 ID。此时,发送请求的方式可以是 POST 或 PUT。

请求 URL: http://127.0.0.1:9200/shopping/_doc/1000

请求体内容为:

{
    "title":"华为手机",
    "category":"华为",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":4999.00
}
1
2
3
4
5
6

发送请求的截图如下:

image-20211114194650152

  • 语法说明: URL http://127.0.0.1:9200/shopping/_doc/1000 中的 1000 是指定的文档唯一标识符。请求方法可以为 POST 或 PUT,PUT 通常用于更新或覆盖已有文档。

# Kibana 操作

在 Kibana 中,创建文档时,可以自动生成 ID 或手动指定 ID。

  • 自动生成 ID:
POST /shopping/_doc
{
    "title":"小米手机",
    "category":"小米",
    "images":"http://www.gulixueyuan.com/xm.jpg",
    "price":3999.00
}
1
2
3
4
5
6
7
  • 手动指定 ID:
POST /shopping/_doc/1000
{
    "title":"华为手机",
    "category":"华为",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":4999.00
}
1
2
3
4
5
6
7

# 2. 查看文档 (GET 请求)

要查看某个特定文档,您需要知道该文档的唯一标识符(ID)。通过 GET 请求,您可以根据文档 ID 检索出文档的内容,类似于在 MySQL 中通过主键进行查询。

# Postman 操作

操作目的:根据文档 ID 查询并获取该文档的详细信息。

  • 请求 URL: http://127.0.0.1:9200/shopping/_doc/1000
  • 请求方法: GET

操作步骤:

  1. 打开 Postman,选择 GET 请求方法。
  2. 在 URL 栏中输入 http://127.0.0.1:9200/shopping/_doc/1000,其中 1000 是文档的唯一标识符。
  3. 点击发送请求按钮,服务器将返回该文档的详细信息。

查询文档的操作截图如下:

image-20211114194845295

响应结果说明:

{
    "_index【索引】": "shopping",      // 文档所在的索引
    "_type【文档类型】": "_doc",        // 文档的类型
    "_id【唯一标识】": "1000",          // 文档的唯一标识符(ID)
    "_version": 1,                      // 文档的版本号
    "_seq_no": 1,
    "_primary_term": 1,
    "found【查询结果】": true,           // true 表示找到了该文档,false 表示未找到
    "_source【文档内容】": {             // 文档的实际数据内容
        "title": "华为手机",
        "category": "华为",
        "images": "https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
        "price": 4999.00
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • found: true 表示文档存在,false 表示文档未找到。
  • _source: 这是文档的实际数据内容,包含 title、category、images 和 price 字段。

# Kibana 操作

在 Kibana 中查看文档的命令如下:

GET /shopping/_doc/1000
1
  • 语法说明: GET /shopping/_doc/1000 表示从索引 shopping 中查询 ID 为 1000 的文档。该请求将返回文档的详细信息。

# 3. 修改文档 (POST 请求)

在 Elasticsearch 中,通过 POST 请求,您可以更新已有的文档。发送与创建文档相同的 POST 请求会覆盖已有文档的内容。如果您需要部分更新,可以使用 _update API。

# 覆盖式更新

# Postman 操作

操作目的:更新或替换文档的全部内容。注意,此操作会覆盖文档的现有内容。

  • 请求 URL: http://127.0.0.1:9200/shopping/_doc/1000
  • 请求方法: POST

操作步骤:

  1. 打开 Postman,选择 POST 请求方法。

  2. 在 URL 栏中输入 http://127.0.0.1:9200/shopping/_doc/1000,1000 是文档的唯一标识符。

  3. 在请求体中输入新的 JSON 数据,更新文档的内容。

请求体内容为:

{
    "title":"华为手机",
    "category":"华为",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":5999.00
}
1
2
3
4
5
6

发送请求的截图如下:

image-20211114195230898

响应结果说明:

{
    "_index": "shopping",        // 文档所属的索引
    "_type": "_doc",             // 文档的类型
    "_id": "1000",               // 文档的唯一标识符
    "_version【版本】": 2,        // 文档的版本号,更新后版本号增加
    "result【结果】": "updated",  // 表示文档更新成功
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 2,
    "_primary_term": 2
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • result: 返回 "updated" 表示文档更新成功。
  • _version: 文档的版本号从 1 更新为 2,表示文档内容已发生变化。

# Kibana 操作

在 Kibana 中,更新文档的命令如下:

POST /shopping/_doc/1000
{
    "title":"华为手机",
    "category":"华为",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":5999.00
}
1
2
3
4
5
6
7

# 4. 修改文档的字段 (POST 请求)

除了完全覆盖更新,您还可以通过 _update API 来修改文档的部分字段。此操作不会覆盖整个文档,而是只更新指定的字段。

# 非覆盖式更新

# Postman 操作

操作目的:只修改文档的某些字段,而不影响其他字段的内容。

  • 请求 URL: http://127.0.0.1:9200/shopping/_update/1000
  • 请求方法: POST

操作步骤:

  1. 打开 Postman,选择 POST 请求方法。
  2. 在 URL 栏中输入 http://127.0.0.1:9200/shopping/_update/1000,其中 1000 是文档的唯一标识符。
  3. 在请求体中输入需要更新的字段内容。

请求体内容为:

{ 
    "doc": {                       // "doc" 字段表示部分更新
        "price":3000.00
    } 
}
1
2
3
4
5

发送请求的截图如下:

image-20211114195642901

响应结果说明:

{
    "_index": "shopping",          // 文档所属的索引
    "_type": "_doc",               // 文档的类型
    "_id": "1000",                 // 文档的唯一标识符
    "_version": 3,                 // 文档的版本号,局部更新也会增加版本号
    "result": "updated",           // 表示文档更新成功
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 3,
    "_primary_term": 2
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • result: 返回 "updated" 表示部分更新成功。
  • _version: 局部更新也会增加文档的版本号,当前版本号为 3。

# Kibana 操作

在 Kibana 中,修改字段的命令如下:

POST /shopping/_update/1000
{ 
    "doc": {
        "price":3000.00
    } 
}
1
2
3
4
5
6

# 5. 删除文档 (DELETE 请求)

通过 DELETE 请求,您可以删除某个特定文档。删除文档是逻辑删除,文档不会立即从磁盘中移除,而是标记为已删除。

# Postman 操作

操作目的:删除某个文档,类似于数据库中的删除记录操作。

  • 请求 URL: http://127.0.0.1:9200/shopping/_doc/1000
  • 请求方法: DELETE

操作步骤:

  1. 打开 Postman,选择 DELETE 请求方法。
  2. 在 URL 栏中输入 http://127.0.0.1:9200/shopping/_doc/1000,其中 1000 是要删除的文档的唯一标识符。
  3. 点击发送请求按钮。

删除文档的操作截图如下:

image-20211114195854936

响应结果说明:

{
    "_index": "shopping",          // 文档所属的索引
    "_type": "_doc",               // 文档的类型
    "_id": "1000",                 // 文档的唯一标识符
    "_version": 4,                 // 文档的版本号,删除操作也会增加版本号
    "result": "deleted",           // 表示文档已成功删除
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 4,
    "_primary_term": 2
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • result: 返回 "deleted" 表示文档成功删除。
  • _version: 删除操作也会增加文档的版本号。

删除文档后,如果再次查询该文档,将返回文档未找到的响应,如下图所示:

image-20211114200028575

如果您尝试删除一个不存在的文档,返回如下错误信息:

image-20211114195952943

# Kibana 操作

在 Kibana 中,删除文档的命令如下:

DELETE /shopping/_doc/1000
1
  • 语法说明: DELETE /shopping/_doc/1000 表示删除索引 shopping 中 ID 为 1000 的文档。

# 6. 条件删除文档 (POST 请求)

除了根据文档 ID 删除文档,您还可以通过指定查询条件删除多条符合条件的文档。此操作通常用于批量删除。

# Postman 操作

操作目的:根据条件批量删除文档,删除价格为 4000.00 的所有文档。

  • 请求 URL: http://127.0.0.1:9200/shopping/_delete_by_query
  • 请求方法: POST

操作步骤:

  1. 向 Elasticsearch 中添加两条数据:
{
    "title":"小米手机",
    "category":"小米",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":4000.00
}
1
2
3
4
5
6
{
    "title":"华为手机",
    "category":"华为",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":4000.00
}
1
2
3
4
5
6

添加数据的操作截图如下:

image-20211114201211327

image-20211114201246622

  1. 使用条件删除 API 删除价格为 4000.00 的所有文档。

请求体:

{
    "query":{
        "match":{
            "price":4000.00
        }
    }
}
1
2
3
4
5
6
7

发送请求的截图如下:

image-20211114201512682

响应结果说明:

{
    "took【耗时】": 175,               // 操作耗时,单位为毫秒
    "timed_out【是否超时】": false,   // 是否超时,false 表示未超时
    "total【总数】": 2,               // 符合条件的文档总数
    "deleted【删除数量】": 2,         // 实际删除的文档数量
    "batches": 1,
    "version_conflicts": 0,
    "noops": 0,
   

 "retries": {
        "bulk": 0,
        "search": 0
    },
    "throttled_millis": 0,
    "requests_per_second": -1.0,
    "throttled_until_millis": 0,
    "failures": []                   // 删除过程中发生的失败
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • total: 表示总共有 2 条文档符合删除条件。
  • deleted: 表示成功删除了 2 条文档。

# Kibana 操作

在 Kibana 中,您可以先添加两条数据:

POST /shopping/_doc/1000
{
    "title":"小米手机",
    "category":"小米",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":4000.00
}
1
2
3
4
5
6
7
POST /shopping/_doc/2000
{
    "title":"华为手机",
    "category":"华为",
    "images":"https://cdn.jsdelivr.net/gh/Kele-Bingtang/static/user/avatar2.png",
    "price":4000.00
}
1
2
3
4
5
6
7

然后通过条件删除命令删除价格为 4000.00 的文档:

POST /shopping/_delete_by_query
{
    "query":{
        "match":{
            "price":4000.00
        }
    }
}
1
2
3
4
5
6
7
8

# 7. 总结

  • 创建文档使用 POST 请求,文档以 JSON 格式存储,您可以选择自动生成 ID 或手动指定 ID。
  • 查询文档使用 GET 请求,查询时需提供文档的唯一标识符(ID)。
  • 修改文档可通过 POST 请求进行覆盖更新,或使用 _update API 进行部分字段的修改。
  • 删除文档使用 DELETE 请求,删除文档是逻辑删除,并不会立即从磁盘中移除。
  • 条件删除使用 _delete_by_query API,可以根据查询条件删除多个文档。

这些操作类似于关系型数据库中的增删改查操作,但 Elasticsearch 提供了更灵活的查询条件与分片存储功能,使得处理大规模数据更加高效。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
ElasticSearch - 映射操作
ElasticSearch - 高级操作

← ElasticSearch - 映射操作 ElasticSearch - 高级操作→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式