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

news2024/11/17 4:58:00

历史文章(文章累计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

SpringBoothttps://t.cn/R3QDhU0

SpringSecurity5.0http://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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1418194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在WSL2中利用gradle构建项目时出现:Could not connect to the Gradle daemon. 的解决方案

最近本人在做基于expo开发的某个APP&#xff0c;由于某种原因&#xff0c;eas云构建连接不上&#xff08;卡在连接谷歌那一步&#xff09;&#xff0c;于是想要利用官方提供的本地构建功能在本地构建一下&#xff0c;结果在wsl这里摔了个跟头&#xff09;&#xff09; eas要求必…

WSL—子系统安装及其相关配置和[诸多报错问题]-修改默认安装位置

一、WSL简介 WSL的全称是Windows Subsystem for Linux。 适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。 二、开启WSL功能 系统要求&#xff1a;win10/11 专业…

前端Vue v-for 的使用

目录 ​编辑 简介 使用方式 基本使用 v-for"(item, index)中item和index作用 示例 迭代对象 示例 结果 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入…

数据可视化工具JSON Crack结合内网穿透实现公网访问

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序&#xff0c;能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

超级好用的远程控制APP!!!

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

Springboot的 Lombok全部关联注解以及核心注解@Data详解

目录 工具安装 依赖注入 注解类别 1. Getter / Setter 2. ToString 3. EqualsAndHashCode 4. NoArgsConstructor / RequiredArgsConstructor / AllArgsConstructor 5. Data 示例 注意事项 6. Value 7. Builder 8. Slf4j / Log / Log4j / Log4j2 / XSlf4j 9. NonN…

【音视频原理】音频编解码原理 ③ ( 音频 比特率 / 码率 | 音频 帧 / 帧长 | 音频 帧 采样排列方式 - 交错模式 和 非交错模式 )

文章目录 一、音频 比特率 / 码率1、音频 比特率2、音频 比特率 案例3、音频 码率4、音频 码率相关因素5、常见的 音频 码率6、视频码率 - 仅做参考 二、音频 帧 / 帧长1、音频帧2、音频 帧长度 三、音频 帧 采样排列方式 - 交错模式 和 非交错模式1、交错模式2、非交错模式 一…

【网络】:网络套接字(UDP)

网络套接字 一.网络字节序二.端口号三.socket1.常见的API2.封装UdpSocket 四.地址转换函数 网络通信的本质就是进程间通信。 一.网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网…

中间件安全

中间件安全 vulhub漏洞复现&#xff1a;https://vulhub.org/操作教程&#xff1a;https://www.freebuf.com/sectool/226207.html 一、Apache Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和…

解决ubuntu 在VMware Workstation Pro下显示不完整的问题

步骤一 ctrlaltT 打开终端&#xff0c;输入&#xff1a; xrandr -s 1920x1080如果报错就输入xrandr,从里面选择适合的分辨率 注意是字母x不是乘号 步骤二 按win键&#xff0c;在搜索框搜索resolution更改显示器分辨率&#xff1a; 选择与电脑相同的分辨率&#xff0c;点击…

构造器模式

构造器模式 意图 将一个复杂对象的构建和表示分离&#xff0c;使得相同的构建能创建不同的表示。 解释 案例&#xff1a;想象一个角色扮演游戏的特征生成器。最简单的选择是让计算机为你创建角色。如果你想手动选择特征的细节像职业、性别、头发的颜色等。特征的产生是一个循…

基于java与vue的生鲜物流系统的设计与实现-计算机毕业设计源码13339

摘要 生鲜产品易于腐烂、难贮存、不易长时间运输&#xff0c;生产者所面临的市场风险很大&#xff0c;很多生鲜产品无法实现“货畅其流”和“物尽其值”&#xff0c;适宜的生鲜产品物流体系就显得尤为重要。本文将广东省生鲜产品物流体系的构建作为一个例子进行系统研究。首先对…

Stable Diffusion 笔记一:网络结构拆解

SD由三大组件组成&#xff1a;VAE&#xff0c;CLIP&#xff0c;Unet。 一VAE&#xff1a; VAE是Variational Autoencoder的缩写&#xff0c;中文名变分自编码器&#xff0c;是一种基于深度学习的生成模型。 &#xff11;潜空间图片与像素图片&#xff1a; 像素图片是正常使…

(九)springboot实战——springboot3下的webflux项目参数验证及其全局参数验证异常处理

前言 在上一节内容中&#xff0c;我们介绍了如何在webflux项目中自定义实现一个全局的异常处理器ErrorWebExceptionHandler&#xff0c;正常情况下其可以处理我们系统的运行时异常&#xff0c;但是无法处理参数验证的异常WebExchangeBindException&#xff0c;所以这里提供另外…

Amazon CodeWhisperer 代码提示——Golang 测评

前言 官网链接&#xff1a; 亚马逊云科技 Amazon CodeGuru Reviewer 中的 CodeWhisperer 是一种代码提示工具&#xff0c;它使用机器学习和人工智能技术来提高开发人员的代码质量和效率。它可以通过分析代码库中的历史代码和最佳实践&#xff0c;为开发人员提供有关如何改进其…

vue预览pdf文件的几种方法

文章目录 vue预览pdf集中方法方法一&#xff1a;方法二&#xff1a;展示效果&#xff1a;需要包依赖&#xff1a;代码&#xff1a; 方法三&#xff1a;展示效果&#xff1a;需要包依赖&#xff1a;代码&#xff1a;自己调参数&#xff0c;选择符合自己的 vue预览pdf集中方法 我…

selenium-Web界面搜索功能测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 测试环境准备&#xff1a; 1、安装Python 2、安装Ch…

C++面试宝典第25题:阶乘末尾零的个数

题目 给定一个整数n,返回n!(n的阶乘)结果尾数中零的个数。 示例 1: 输入:3 输出:0 解释:3! = 6,尾数中没有零。 示例 2: 输入:5 输出:1 解释:5! = 120,尾数中有1个零。 解析 这道题主要考察应聘者对于数学问题的分析和理解能力,以及在多个解决方案中,寻求最优…

Python 拼接字符串的 7 种方式

忘了在哪看到一位编程大牛调侃&#xff0c;他说程序员每天就做两件事&#xff0c;其中之一就是处理字符串。相信不少同学会有同感。 几乎任何一种编程语言&#xff0c;都把字符串列为最基础和不可或缺的数据类型。而拼接字符串是必备的一种技能。今天&#xff0c;我跟大家一起来…

Github 2024-01-28 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-28统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3TypeScript项目2Rust项目1HTML项目1JavaScript项目1Cuda项目1C#项目1非开发语言项目1 Nuxt&#…