从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

    • Redis

    • Mybatis

    • Lucene

    • Elasticsearch

      • Elasticsearch 简介
      • ES 的安装和启动
      • ES 相关术语
      • ES 索引库的维护
        • 使用 Restful 接口直接访问
        • 使用 head 插件
        • 安装 postman
        • 新建索引库
        • 删除索引库
        • 创建 document
        • 删除 document
        • 修改 document
        • head 插件中发送 HTTP 请求
        • 总结
      • ES 索引库的查询
      • ES 集成 IK 分词器
      • ES 集群
      • 使用 Java 操作 ES
      • 使用 Java 查询 ES
      • SpringDataElasticSearch
    • MQ

    • MyCat

    • Lombok

  • SpringMVC

  • SpringBoot

  • Java
  • 主流框架
  • Elasticsearch
2023-05-22
目录

ES 索引库的维护

# 30.ES 索引库的维护

接下来我们就开始使用 ES,来演示如何创建和维护索引。 ‍ 实际开发中,主要有三种方式可以作为 ES 服务的客户端:

  • 使用 ES 提供的 Restful 接口直接访问
  • elasticsearch-head 插件
  • 使用 ES 提供的 API 进行访问

# 使用 Restful 接口直接访问

例如,我们可以在命令行里直接发送 HTTP 请求,假设使用 curl 工具:

curl ‐X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' ‐d '<BODY>'
1

‍ 其中:

参数 解释
VERB 适当的 HTTP 方法 或 谓词 : GET 、POST 、PUT 、HEAD 或者 DELETE 。
PROTOCOL http 或者 https (如果你在 Elasticsearch 前面有一个 https 代理)
HOST Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。
PORT 运行 Elasticsearch HTTP 服务的端口号,默认是 9200
PATH API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例 如: _cluster/stats 和 _nodes/stats/jvm
QUERY_STRING 任意可选的查询字符串参数,例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)
BODY 一个 JSON 格式的请求体 (如果请求需要的话)

‍ 由于使用命令行挺麻烦的,要敲的命令挺长,这里不演示

# 使用 head 插件

‍ 我们点击到索引的选项卡,然后点击新建,填写索引相关信息:

‍

点击 OK,会有弹框提示我们创建成功了:

‍

在概览也能看到有 5 个分片,1 个复制

‍

也可以删除某个索引库:

‍

使用该插件,一些简单的操作是可以用,但是对于稍微复杂的就不太合适了,我们一般是使用 postman。

‍

# 安装 postman

postman 是一款强大的网页调试工具。并且带有客户端,提供功能强大的 Web API 和 HTTP 请求调试。软件功能非常强大,免费,界面简洁明晰、操作方便快捷,设计得很人性化。

postman 能够发送任何类型的 HTTP 请求 (GET, HEAD, POST, PUT..),且可以附带任何数量的参数,在开发中经常能用到。

官网:Postman (opens new window),我们选择对应的平台下载:

‍

或去我的 网盘 (opens new window) 下载,路径为 编程学习/编程工具/Postman-win64-Setup.exe,安装后需要注册和登录才能使用。 ‍ 我们先创建一个 Collections(可以理解为一个项目)

‍

然后添加一个请求(可以理解为创建一个类)

‍

然后我们就可以在输入框里输入网址,发送一个 GET 请求了:

注意:随着 postman 的更新,界面可能有点不同,具体以官网文档为准。 ‍

# 新建索引库

‍

# 直接创建

假设我们新建一个索引库,只需选择 PUT 方式,在 URL 后面加上索引库名字即可,例如:

‍

使用 head 插件也能看到创建好的索引库:

‍

我们可以查看下索引的信息:

‍

可以看到 mappings 是空的。

‍

# 指定 mappings 创建索引库

我们可以在创建索引库的时候就带上 mappings 信息,或者创建好后补上也行。我们演示下创建时定义 mappings。首先是定义 JSON:

{
    "mappings": {
        "article": {
            "properties": {
                "id": {
                    "type": "long",
                    "store": true,
                    "index": "not_analyzed"
                },
                "title": {
                    "type": "text",
                    "store": true,
                    "analyzer": "standard",
                    "index": "analyzed"
                },
                "content": {
                    "type": "text",
                    "store": true,
                    "analyzer": "standard",
                    "index": "analyzed"
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

上面我们相当于定义了一个表 article,里面有 3 个字段:id,title,content,每个字段的类型、是否存储、使用什么分析器和是否索引,都指定了。 ‍ 回到 postman,我们输入上述的 JSON,然后点击发送:

响应结果:创建成功了

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "blog1"
}
1
2
3
4
5

‍ 访问 head 插件,查看 blog1 索引库的索引信息,也能看到 mappings:

# 创建索引后设置 Mapping

假设我们给 blog 这个索引库添加 mappings。首先是请求的 URL:

POST http://127.0.0.1:9200/blog/hello/_mappings
1

使用 post 方式,然后后面跟着索引库名,然后是要新建的表名,然后是要修改的信息 mappings

JSON 信息:

{      
    "hello": {
        "properties": {
            "id": {
                "type": "long",
                "store": true,
                "index": "not_analyzed"
            },
            "title": {
                "type": "text",
                "store": true,
                "analyzer": "standard",
                "index": "analyzed"
            },
            "content": {
                "type": "text",
                "store": true,
                "analyzer": "standard",
                "index": "analyzed"
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

‍ 然后我们点击发送:

‍

返回结果:

{
    "acknowledged": true
}
1
2
3

‍ 在 head 插件中也能看到 mappings 信息:

# 删除索引库

请求 url:

 DELETE localhost:9200/索引库名
1

‍ 在 postman 中,我们选择删除,然后发送

‍

响应结果:

{
    "acknowledged": true
}
1
2
3

‍ 同时在 head 插件中也看不到该索引库了

# 创建 document

请求 url:索引库/type/文档的 id,注意该 id 是真正的 id,不是 JSON 中的 id 属性,JSON 中的数据只是碰巧同名

POST localhost:9200/blog1/article/1
1

请求体:

{ 
    "id": 1, 
    "title": "ElasticSearch是一个基于Lucene的搜索服务器", 
    "content": "它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java 开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时 搜索,稳定,可靠,快速,安装使用方便。" 
}
1
2
3
4
5

‍ postman 截图:

响应结果:创建成功了

{
    "_index": "blog",
    "_type": "hello",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "created": true
}
1
2
3
4
5
6
7
8
9
10
11
12
13

在 head 插件也能查看到数据:

注意 _id 是 ES 帮我们给每个 document 生成的,而我们自己也刚好定义了一个 id 属性。一般两者保持一致

我们在创建 document 时也可以不指定 ID,也能正常生成:

‍

响应结果:此时的_id 类似 UUID,随机生成的,没什么规律

{
    "_index": "blog",
    "_type": "hello",
    "_id": "AYgm_-pEoyq3JE_fvM1J",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "created": true
}
1
2
3
4
5
6
7
8
9
10
11
12
13

‍ 也可以在 head 插件中看到:

# 删除 document

请求 url:

DELETE localhost:9200/blog/hello/1
1

postman 截图:选择 Delete,然后是索引库/type/_id,注意是 _id,这个才是每条记录的 ID

‍

响应结果:

{
    "found": true,
    "_index": "blog",
    "_type": "hello",
    "_id": "1",
    "_version": 2,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

‍ 在 head 插件中,也没看到这个数据了:

# 修改 document

和 Lucene 一样,ES 修改文档的原理也是先删除然后添加。请求 url 举例:

POST localhost:9200/blog/hello/1
1

可以看到和创建索引的 URL 是一样的。如果没有这个文档,就会新建;有的话就删除后创建。

我们先创建下 id 为 1 的文档:

{
    "id": 1,
    "title": "新添加的文档1",
    "content": "新添加的文档的内容"
}
1
2
3
4
5

‍ postman 截图:

‍

能看到创建成功了:

然后我们更新:

{
    "id": 123,
    "title": "修改之后的文档1",
    "content": "新添加的文档的内容"
}
1
2
3
4
5

能看到数据确实被更新了:

# head 插件中发送 HTTP 请求

head 插件也提供了类似 postman 的功能:这里就不一一演示了

# 总结

本文我们介绍了如何维护索引库,接下来我们学习下如何查询数据。

上次更新: 2025/11/15 08:26:36
ES 相关术语
ES 索引库的查询

← ES 相关术语 ES 索引库的查询→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式