ElasticSearch重建/创建/删除索引操作 - 第501篇

历史文章(文章累计500+)
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
Elasticsearch可视化平台Kibana [ES系列] - 第498篇
Elasticsearch安装分词插件[ES系列] - 第499篇
ElasticSearch扫盲概念篇[ES系列] - 第500篇
导读
Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。
这一节来看看ES的索引的基本操作 – 增删改查。
一、索引操作
1.1 创建索引
格式: PUT /索引名称
索引命名规范:
·以小写英文字母命名索引
·不要使用驼峰命名法则
·如过出现多个单词的索引名称,以全小写 + 下划线分隔的方式:如test_index。
ES 索引创建成功之后,以下属性将不可修改
·索引名称
·主分片数量
·字段类型
举例说明:
#创建索引PUT /es_db 
 

1.2查询索引
格式: GET /索引名称
#查询索引GET /es_db 
 

1.3删除索引
格式: DELETE /索引名称
DELETE /es_db 
 
二、设置 Settings
创建索引的时候指定 settings
<span style="color:#333333"><span style="background-color:#fafafa"><code>PUT <index_name></code><code>{</code><code>  <span style="color:#dd1144">"settings"</span>: {}</code><code>}</code><code></code></span></span> 
创建索引时可以设置分片数和副本数
<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em>#创建索引es_db,指定其主分片数量为 3,每个主分片的副本数量为 2</em></span></code><code>PUT /es_db</code><code>{</code><code>  <span style="color:#dd1144">"settings"</span>: {</code><code>    <span style="color:#dd1144">"number_of_shards"</span>: 3,</code><code>    <span style="color:#dd1144">"number_of_replicas"</span>: 2</code><code>  }</code><code>}</code><code></code></span></span> 
 
说明:
(1)静态索引设置:只能在创建索引时或在关闭状态的索引上设置。
- index.number_of_shards:索引的主分片的个数,默认为 1,此设置只能在创建索引时设置。
(2)动态索引设置:即可以使用 _setting API 在实时修改的配置项。
- index.number_of_replicas:每个主分片的副本数。默认为 1,允许配置为 0。
- index.refresh_interval:执行刷新操作的频率,默认为1s. 可以设置 -1 为禁用刷新。
- index.max_result_window:from + size 搜索此索引 的最大值,默认为 10000。
使用 _setting 只能修改允许动态修改的配置项
<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em>#修改索引配置,把每个主分片的副本数量修改为 1</em></span></code><code>PUT /es_db/_settings</code><code>{</code><code><span style="color:#dd1144">"index"</span> : {</code><code><span style="color:#dd1144">"number_of_replicas"</span> : 1</code><code>}</code><code>}</code><code></code></span></span> 
 
创建索引时可以指定IK分词器作为默认分词器
<span style="color:#333333"><span style="background-color:#fafafa"><code>PUT /es_db</code><code>{</code><code>  <span style="color:#dd1144">"settings"</span> : {</code><code>    <span style="color:#dd1144">"index"</span> : {</code><code>      <span style="color:#dd1144">"analysis.analyzer.default.type"</span>: <span style="color:#dd1144">"ik_max_word"</span></code><code>    }</code><code>  }</code><code>}</code><code></code></span></span> 
 
 
三、设置文档映射Mapping
ES 中的 mapping 有点类似与关系数据库中表结构的概念,在 MySQL 中,表结构里包含了字段名称,字段的类型还有索引信息等。在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在 ES 中一个字段可以有多个类型。ES中Mapping可以分为动态映射和静态映射。
<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em>#查看完整的索引 mapping</em></span></code><code>GET <span style="color:#dd1144">/<index_name>/_mappings</span></code><code></code><code><span style="color:#afafaf"><em>#查看索引中指定字段的 mapping</em></span></code><code>GET <span style="color:#dd1144">/<index_name>/_mappings/field/<field_name></span></code><code></code></span></span> 
mapping 的使用禁忌
·ES 没有隐式类型转换
·ES 不支持类型修改
·生产环境尽可能的避免使用 动态映射(dynamic mapping)
3.1动态映射
在关系数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段、类型、长度、主键等,最后才能基于表插入数据。而Elasticsearch中不需要定义Mapping映射,在文档写入Elasticsearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。

示例:
<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em>#删除原索引</em></span></code><code><span style="color:#ca7d37">DELETE</span> /<span style="color:#ca7d37">user</span></code><code></code><code><span style="color:#afafaf"><em>#创建文档(ES根据数据类型, 会自动创建映射)</em></span></code><code>PUT /<span style="color:#ca7d37">user</span>/_doc/<span style="color:#0e9ce5">1</span></code><code>{</code><code>  <span style="color:#dd1144">"name"</span>: <span style="color:#dd1144">"fox"</span>,</code><code>  <span style="color:#dd1144">"age"</span>: <span style="color:#0e9ce5">32</span>,</code><code>  <span style="color:#dd1144">"address"</span>:<span style="color:#dd1144">"长沙麓谷"</span></code><code>}</code><code></code><code><span style="color:#afafaf"><em>#获取文档映射</em></span></code><code><span style="color:#ca7d37">GET</span> /<span style="color:#ca7d37">user</span>/_mapping</code><code></code></span></span> 
 
 

3.2静态映射
静态映射也叫做显式映射,即:在索引文档写入之前,人为创建索引并且指定索引中每个字段类型、分词器等参数。
<span style="color:#333333"><span style="background-color:#fafafa"><code>PUT /user</code><code>{</code><code>  <span style="color:#dd1144">"settings"</span>: {</code><code>    <span style="color:#dd1144">"number_of_shards"</span>: <span style="color:#dd1144">"1"</span>,</code><code>    <span style="color:#dd1144">"number_of_replicas"</span>: <span style="color:#dd1144">"1"</span></code><code>  },</code><code>  <span style="color:#dd1144">"mappings"</span>: {</code><code>    <span style="color:#dd1144">"properties"</span>: {</code><code>      <span style="color:#dd1144">"name"</span>: {</code><code>        <span style="color:#dd1144">"type"</span>: <span style="color:#dd1144">"keyword"</span></code><code>      },</code><code>      <span style="color:#dd1144">"age"</span> : {</code><code>        <span style="color:#dd1144">"type"</span> : <span style="color:#dd1144">"long"</span></code><code>      },</code><code>      <span style="color:#dd1144">"address"</span> : {</code><code>        <span style="color:#dd1144">"type"</span> : <span style="color:#dd1144">"text"</span></code><code>      }</code><code>    }</code><code>  }</code><code>}</code><code></code></span></span> 
 

3.3常用Mapping参数配置
|   参数名称  |   释义  | 
|   analyzer  |   指定分析器,只有 text 类型字段支持。  | 
|   copy_to  |   该参数允许将多个字段的值复制到组字段中,然后可以将其作为单个字段进行查询  | 
|   dynamic  |   控制是否可以动态添加新字段,支持以下四个选项: true:(默认)允许动态映射 false:忽略新字段。这些字段不会被索引或搜索,但仍会出现在_source返回的命中字段中。这些字段不会添加到映射中,必须显式添加新字段。 runtime:新字段作为运行时字段添加到索引中,这些字段没有索引,是_source在查询时加载的。 strict:如果检测到新字段,则会抛出异常并拒绝文档。必须将新字段显式添加到映射中。  | 
|   doc_values  |   为了提升排序和聚合效率,默认true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用doc值以节省磁盘空间(不支持 text 和 annotated_text)  | 
|   eager_global_ordinals  |   用于聚合的字段上,优化聚合性能。  | 
|   enabled  |   是否创建倒排索引,可以对字段操作,也可以对索引操作,如果不创建索引,任然可以检索并在_source元数据中展示,谨慎使用,该状态无法修改。  | 
|   fielddata  |   查询时内存数据结构,在首次用当前字段聚合、排序或者在脚本中使用时,需要字段为fielddata数据结构,并且创建倒排索引保存到堆中  | 
|   fields  |   给 field 创建多字段,用于不同目的(全文检索或者聚合分析排序)  | 
|   format  |   用于格式化代码,如 "data":{ "type": "data", "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" }  | 
|   index  |   是否对创建对当前字段创建倒排索引,默认 true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在 source 元数据中展示。  | 
|   norms  |   是否禁用评分(在filter和聚合字段上应该禁用)  | 
|   null_value  |   为 null 值设置默认值  | 
|   search_analyzer  |   设置单独的查询时分析器  | 
示例:
- index: 控制当前字段是否被索引,默认为true。如果设置为false,该字段不可被搜索
<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#ca7d37">DELETE</span> /<span style="color:#ca7d37">user</span></code><code>PUT /<span style="color:#ca7d37">user</span></code><code>{</code><code>  <span style="color:#dd1144">"mappings"</span> : {</code><code>    <span style="color:#dd1144">"properties"</span> : {</code><code>      <span style="color:#dd1144">"address"</span> : {</code><code>        <span style="color:#dd1144">"type"</span> : <span style="color:#dd1144">"text"</span>,</code><code>        <span style="color:#dd1144">"index"</span>: <span style="color:#0e9ce5">false</span></code><code>      },</code><code>      <span style="color:#dd1144">"age"</span> : {</code><code>        <span style="color:#dd1144">"type"</span> : <span style="color:#dd1144">"long"</span></code><code>      },</code><code>      <span style="color:#dd1144">"name"</span> : {</code><code>        <span style="color:#dd1144">"type"</span> : <span style="color:#dd1144">"text"</span></code><code>      }</code><code>    }</code><code>  }</code><code>}</code><code></code><code>PUT /<span style="color:#ca7d37">user</span>/_doc/<span style="color:#0e9ce5">1</span></code><code>{</code><code>  <span style="color:#dd1144">"name"</span>:<span style="color:#dd1144">"fox"</span>,</code><code>  <span style="color:#dd1144">"address"</span>:<span style="color:#dd1144">"广州白云山公园"</span>,</code><code>  <span style="color:#dd1144">"age"</span>:<span style="color:#0e9ce5">30</span></code><code>}</code><code></code><code><span style="color:#ca7d37">GET</span> /<span style="color:#ca7d37">user</span></code><code></code><code><span style="color:#ca7d37">GET</span> /<span style="color:#ca7d37">user</span>/_search</code><code>{</code><code>  <span style="color:#dd1144">"query"</span>: {</code><code>    <span style="color:#dd1144">"match"</span>: {</code><code>      <span style="color:#dd1144">"address"</span>: <span style="color:#dd1144">"广州"</span></code><code>    }</code><code>  }</code><code>}</code><code></code></span></span> 
 

四、使用ReIndex重建索引
具体方法:
具体方法:
1)如果要推倒现有的映射, 你得重新建立一个静态索引
2)然后把之前索引里的数据导入到新的索引里
3)删除原创建的索引
4)为新索引起个别名, 为原索引名
通过这几个步骤可以实现了索引的平滑过渡,并且是零停机
<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em># 1. 重新建立一个静态索引</em></span></code><code>PUT /user2</code><code>{</code><code>  <span style="color:#dd1144">"mappings"</span>: {</code><code>    <span style="color:#dd1144">"properties"</span>: {</code><code>      <span style="color:#dd1144">"name"</span>: {</code><code>        <span style="color:#dd1144">"type"</span>: <span style="color:#dd1144">"text"</span></code><code>      },</code><code>      <span style="color:#dd1144">"address"</span>: {</code><code>        <span style="color:#dd1144">"type"</span>: <span style="color:#dd1144">"text"</span>,</code><code>        <span style="color:#dd1144">"analyzer"</span>: <span style="color:#dd1144">"ik_max_word"</span></code><code>      }</code><code>    }</code><code>  }</code><code>}</code><code></code><code><span style="color:#afafaf"><em># 2. 把之前索引里的数据导入到新的索引里</em></span></code><code>POST _reindex</code><code>{</code><code>    <span style="color:#dd1144">"source"</span>: {</code><code>      <span style="color:#dd1144">"index"</span>: <span style="color:#dd1144">"user"</span></code><code>    },</code><code>    <span style="color:#dd1144">"dest"</span>: {</code><code>      <span style="color:#dd1144">"index"</span>: <span style="color:#dd1144">"user2"</span></code><code>    }</code><code>}</code><code><span style="color:#afafaf"><em># 3. 删除原创建的索引</em></span></code><code>DELETE /user</code><code><span style="color:#afafaf"><em># 4. 为新索引起个别名, 为原索引名</em></span></code><code>PUT /user2/_alias/user</code><code></code><code>GET /user</code><code></code></span></span> 
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。 
 
à悟纤学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
ShardingJDBC分库分表:http://t.cn/A6ZarrqS
分布式事务解决方案:http://t.cn/A6ZaBnIr
JVM内存模型调优实战:http://t.cn/A6wWMVqG
Spring入门到精通:https://t.cn/A6bFcDh4
大话设计模式之爱你:https://dwz.cn/wqO0MAy7
相关文章:
ElasticSearch重建/创建/删除索引操作 - 第501篇
历史文章(文章累计500) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 E…...
数据写入HBase(scala)
package sourceimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytesobject ffff {def main(args: Array[String]): Unit {//hbase连接配置val conf …...
Codeforces Round 799 (Div. 4)
目录 A. Marathon B. All Distinct C. Where’s the Bishop? D. The Clock E. Binary Deque F. 3SUM G. 2^Sort H. Gambling A. Marathon 直接模拟 void solve() {int ans0;for(int i1;i<4;i) {cin>>a[i];if(i>1&&a[i]>a[1]) ans;}cout<&l…...
为什么要用云手机养tiktok账号
在拓展海外电商市场的过程中,许多用户选择采用tiktok短视频平台引流的策略,以提升在电商平台上的流量,吸引更多消费者。而要进行tiktok引流,养号是必不可少的一个环节。tiktok云手机成为实现国内跨境养号的一种有效方式࿰…...
vue pc端网页实现自适应
一、基本原理 pc端做自适应可以用rem来实现,啥是rem,自己百度 二、新建rem.ts文件 // rem等比适配配置文件 // 基准大小 const baseSize 14 // 设置 rem 函数 function setRem () {// 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要…...
Android 13以上版本读写SD卡权限适配
如题,最近工作上处理的问题,把解决方案简单逻列出来,供有需要的朋友参考之 解决方案: 1、配置权限 <uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /><uses-permission android:name&q…...
并查集模板:食物链详解
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int N 50010;static int n,m; //n个动物,m局判断static int[] p new int[N]; //p[i]是i的根节点static int[] d new int[N]; //d[i]表示i到…...
使用WAF防御网络上的隐蔽威胁之反序列化攻击
 什么是反序列化 反序列化是将数据结构或对象状态从某种格式转换回对象的过程。这种格式通常是二进制流或者字符串(如JSON、XML),它是对象序列化(即对象转换为可存储或可传输格式)的逆过程。 反序列化的安全风险 反…...
05. 交换机的基本配置
文章目录 一. 初识交换机1.1. 交换机的概述1.2. Ethernet_ll格式1.3. MAC分类1.4. 冲突域1.5. 广播域1.6. 交换机的原理1.7. 交换机的3种转发行为 二. 初识ARP2.1. ARP概述2.2. ARP报文格式2.3. ARP的分类2.4. 免费ARP的作用 三. 实验专题3.1. 实验1:交换机的基本原…...
yolo将标签数据打到原图上形成目标框
第一章 目标:为了查看自己在标注标签时是否准确,写了这段代码来将标注的框打到原图上 第二章 步骤:进行反归一化得到坐标画出矩形框 第二行是目标图片对应的txt,第三行是目标图片 第三章 全部代码如下: import cv2 import …...
002-00-02【大红ai源码】dolphinscheduler3.2.0 源码环境搭建------by孤山村头王大爷家女儿大红
【ai阅读源码-dolphinscheduler】 DolphinScheduler 开发手册1、软件要求2、克隆代码库3、编译打包4、代码风格5、新建数据库,导入元数据。6, 启动后端6.1 启动api-server 6.2 启动master-server6.3 启动worker-server 7 启动前端 DolphinScheduler 开发…...
python-自动化篇-运维-监控-如何使⽤Python处理和解析⽇志⽂件?-实操记录
文章目录 1. 选择日志文件格式: 确定要处理的日志文件的格式。不同的日志文件可能具有不同的格式,如文本日志、CSV、JSON、XML等。了解日志文件的格式对解析⾮常重要。2. 打开日志文件: 使⽤Python的文件操作功能打开日志文件,以便…...
代码随想录算法训练营DAY6 | 哈希表(1)
DAY5休息一天,今天重启~ 哈希表理论基础:代码随想录 Java hash实现 :java 哈希表-CSDN博客 一、LeetCode 242 有效的字母异位词 题目链接:242.有效的字母异位词 思路:设置字典 class Solution {public boolean isAnag…...
【嵌入式学习】C++QT-Day3-C++基础
笔记 见我的博客:https://lingjun.life/wiki/EmbeddedNote/19Cpp 作业 设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象p1,设计这两个类的构造函…...
表贴式PMSM的直接转矩控制(DTC)MATLAB仿真模型
微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 表贴式PMSM的直接转矩控制(DTC),直接使用滞环控制对转矩和磁链进行控制,相对于传统的FOC控制而言,其不需要进行解耦变换,在此次的有以下几点需要注意:…...
详解OpenHarmony各部分文件在XR806上的编译顺序
大家好,今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道,一提到编译可能大家会感到有点儿头疼,但请放心,我不会让大家头疼的。我们要明白,在开始写代码之前,了解整个程序的编译路径是十分有必…...
【美团】无人机-大数据开发工程师
更新时间:2024/01/29 工作地点:北京市 事业群:到家事业群 工作经验:3年 部门介绍 为了更好地提升城市即时配送的效率与体验,美团于2017年启动了无人机配送服务的探索,通过科技创新推动履约工具变革&#x…...
微服务系统设计:横向扩展和纵向扩展的对比
微服务扩展性:水平扩展 vs 垂直扩展 特点水平扩展垂直扩展扩展单位增加微服务实例增加单个实例的资源 (CPU,内存)方向向外,增加节点向上,增加单个节点的资源复杂性随着实例数量的增加,管理难度更大管理更简单…...
Java基于SpringBoot+Vue的网上超市管理系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
HTTP中POST、GET、PUT、DELETE方式的区别
GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作&#x…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
