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…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
