【Elasticsearch】Elasticsearch动态映射与静态映射详解

文章目录

  • 📑前言
  • 一、Elasticsearch 映射概述
    • 1.1 什么是映射?
    • 1.2 映射的分类
  • 二、动态映射
    • 2.1 动态映射的定义
    • 2.2 动态映射的优点
    • 2.3 动态映射的缺点
    • 2.4 动态映射的应用场景
    • 2.5 动态映射的配置示例
  • 三、静态映射
    • 3.1 静态映射的定义
    • 3.2 静态映射的优点
    • 3.3 静态映射的缺点
    • 3.4 静态映射的应用场景
    • 3.5 静态映射的配置示例
  • 四、动态映射与静态映射的比较
    • 4.1 应用场景
    • 4.2 配置和管理
    • 4.3 性能和风险
  • 五、动态映射和静态映射的最佳实践
    • 5.1 动态映射的最佳实践
    • 5.2 静态映射的最佳实践
    • 5.3 动态映射与静态映射结合使用
  • 六、小结

📑前言

Elasticsearch 是一个分布式搜索和分析引擎,广泛应用于实时数据分析和全文检索中。在使用 Elasticsearch 时,映射(Mapping)是定义索引中文档结构和字段类型的过程。映射主要分为动态映射和静态映射两种方式。本文将详细介绍这两种映射的区别及其在不同场景中的应用。

一、Elasticsearch 映射概述

1.1 什么是映射?

映射是 Elasticsearch 中定义索引中文档结构、字段类型及其属性的过程。通过映射,Elasticsearch 可以理解数据的结构和类型,从而进行有效的存储和检索。映射可以定义字段的类型(如字符串、整数、日期等)、字段是否可以被索引、是否存储原始值等属性。

1.2 映射的分类

映射主要分为两类:

  • 动态映射(Dynamic Mapping)
  • 静态映射(Static Mapping)

这两种映射方式在字段定义和管理上存在显著区别,适用于不同的数据处理场景。

二、动态映射

2.1 动态映射的定义

动态映射是 Elasticsearch 自动推断和创建字段类型的过程。当索引中插入新文档时,如果文档包含了映射中尚未定义的新字段,Elasticsearch 会根据字段的值自动推断其类型并将其添加到映射中。

2.2 动态映射的优点

  • 方便快捷:无需提前定义所有字段类型,减少了开发和配置的工作量。
  • 适应性强:适用于字段结构不固定或变化频繁的场景,能够自动适应新字段的加入。

2.3 动态映射的缺点

  • 不精确性:自动推断的类型可能不完全符合预期,例如字符串类型的日期被推断为文本类型。
  • 风险控制:在高并发写入时可能会引起映射爆炸(Mapping Explosion)问题,导致内存和性能问题。
  • 不可预测性:映射变化可能会影响查询性能和结果的准确性。

2.4 动态映射的应用场景

动态映射适用于以下场景:

  • 数据结构不固定或频繁变化的应用,例如日志分析、社交媒体数据采集等。
  • 开发阶段或快速原型设计时,用于快速验证数据模型。

2.5 动态映射的配置示例

PUT /my_index
{"mappings": {"dynamic": true}
}PUT /my_index/_doc/1
{"name": "John Doe","age": 30,"join_date": "2024-07-04"
}

上述示例中,my_index 索引配置了动态映射,当插入文档时,Elasticsearch 自动推断 name 为文本类型,age 为整数类型,join_date 为日期类型。

三、静态映射

3.1 静态映射的定义

静态映射是提前定义好索引中文档结构和字段类型的过程。通过静态映射,用户可以明确指定每个字段的类型及其属性,从而控制数据的存储和检索行为。

3.2 静态映射的优点

  • 精确控制:用户可以精确定义字段类型,避免类型推断错误。
  • 性能优化:通过合理的映射设计,可以提升索引和查询性能。
  • 风险降低:避免了动态映射可能引起的映射爆炸和性能问题。

3.3 静态映射的缺点

  • 灵活性差:需要提前定义所有字段,无法自动适应新字段的加入。
  • 配置复杂:对于字段多且复杂的数据结构,映射配置工作量较大。

3.4 静态映射的应用场景

静态映射适用于以下场景:

  • 数据结构相对固定且字段类型明确的应用,例如电商平台商品数据、用户信息管理等。
  • 对性能要求较高,需要精确控制字段类型和索引行为的场景。

3.5 静态映射的配置示例

PUT /my_index
{"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"},"join_date": {"type": "date"}}}
}PUT /my_index/_doc/1
{"name": "John Doe","age": 30,"join_date": "2024-07-04"
}

上述示例中,my_index 索引配置了静态映射,明确指定了 name 为文本类型,age 为整数类型,join_date 为日期类型。

四、动态映射与静态映射的比较

4.1 应用场景

  • 动态映射适用于数据结构不固定或频繁变化的场景,方便快速适应新字段。
  • 静态映射适用于数据结构固定且字段类型明确的场景,能够精确控制字段类型和索引行为。

4.2 配置和管理

  • 动态映射无需提前定义字段类型,配置简单,减少了开发和配置工作量。
  • 静态映射需要提前定义所有字段,配置复杂,但能够精确控制字段类型和索引行为。

4.3 性能和风险

  • 动态映射可能引发映射爆炸和性能问题,尤其在高并发写入时风险较大。
  • 静态映射通过合理设计可以提升索引和查询性能,降低动态映射带来的风险。

五、动态映射和静态映射的最佳实践

5.1 动态映射的最佳实践

  • 限制字段类型:可以通过设置 dynamic_templates 来限制字段类型,避免推断错误。
  • 控制字段数量:限制动态映射创建的字段数量,防止映射爆炸。
  • 监控映射变化:定期监控索引映射变化,及时发现和处理异常字段。

5.2 静态映射的最佳实践

  • 合理设计映射:根据业务需求和查询场景合理设计映射,优化性能。
  • 定期评审映射:定期评审和优化映射配置,适应业务变化。
  • 利用模板管理:通过索引模板管理映射配置,简化多索引管理。

5.3 动态映射与静态映射结合使用

在实际应用中,可以结合使用动态映射和静态映射。例如,在开发阶段使用动态映射,快速验证数据模型;在生产阶段使用静态映射,确保数据结构和类型的稳定性和性能。

六、小结

Elasticsearch 的动态映射和静态映射各有优缺点,适用于不同的数据处理场景。动态映射方便快捷,适应性强,但可能带来不精确性和风险;静态映射精确控制,性能优化,但配置复杂,灵活性差。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper:Zookeeper集群角色

文章目录 一、Leader选举二、Zookeeper集群角色 一、Leader选举 Serverid:服务器ID;比如有三台服务器,编号越大在选择算法中的权重越大。Zxid:数据ID;服务器中存放的最大数据ID,值越大说明数据越新&#x…

JS(JavaScript) 数据校验 正则表达式

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

摸鱼大数据——Spark Core——RDD的基本介绍和如何构建RDD

1、什么是RDD RDD:英文全称Resilient Distributed Dataset,叫做弹性分布式数据集,代表一个不可变、可分区、里面的元素可并行计算的分布式的抽象的数据集合。 Resilient弹性:RDD的数据可以存储在内存或者磁盘当中,RDD…

java常用类(3)

目录 一. 正则表达式 二. Math类 三. Random类 四. Date类 五. Calendar类 六. SimpDateFormate类 七. BigInteger类 八. BigDecimal类 一. 正则表达式 正则表达式(Regular Expression)就是用一些特殊的符号去匹配一个字符串是否符合规则,利用String类中的matches()方…

[Leetcode 136][Easy]-只出现一次的数字

目录 题目描述 具体思路 题目描述 原题链接 具体思路 ①首先看到数组中重复的数字,想到快慢指针,但是数组的元素是乱序的不好求。因此先对数组排序。使用了STL库的sort函数,时间复杂度O(nlogn)不符合题目要求,空间复杂度O(1)。…

KEYSIGHT是德科技 E5063A ENA 系列网络分析仪

E5063A ENA 矢量网络分析仪 18GHz 2端口 降低无源射频元器件的测试成本 Keysight E5063A ENA 是一款经济适用的台式矢量网络分析仪,可用于测试简单的无源元器件,例如频率最高达到 18 GHz 的天线、滤波器、电缆或连接器。 作为业界闻名的 ENA 系列…

打卡第一天

今天是参加算法训练营的第一天,希望我能把这个训练营坚持下来,希望我的算法编程题的能力有所提升,不再面试挂了,面试总是挂编程题,记录我leetcode刷题数量: 希望我通过这个训练营能够实现两份工作的无缝衔接…

用720云搭建数字孪生VR智慧安防系统,赋能安防升级!

“安全防范"一直是我国城镇化发展进程中重点关注的工作板块,随着时代发展需求与科技的日新月异,安防行业正在积极融合VR3D数字孪生技术,升级安防数字基础设施和安防产品服务创新。 今年2月,《数字中国建设整体布局规划》的出…

docker容器间网络仿真工具-pumba

docker-tc&pumba docker-tc:docker-tc项目仓库 pumba:pumba项目仓库 这两个项目理论上都可以实现对容器间的网络环境进行各种模拟干预,包括延迟,丢包,带宽限制等。 但是我在实际使用时,发现docker-tc这个工具在进行网络进行模…

如何使用python网络爬虫批量获取公共资源数据教程?

原文链接:如何使用python网络爬虫批量获取公共资源数据教程?https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608240&idx4&snef281f66727afabfaae2066c6e92f792&chksmfa826657cdf5ef41571115328a09b9d34367d8b11415d5a5781dc4c…

84 柱状图中最大的矩形

题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 输入:heights [2,1,5,6,2,3] 输出:10 解释:最大的矩…

从全连接到卷积

一、全连接到卷积 1、卷积具有两个原则: 平移不变性:无论作用在哪个部分,它都要有相同的作用,而不会随着位置的改变而改变 局部性:卷积核作用处,作用域应该是核作用点的周围一小部分而不作用于更大的部分 …

【无需公网IP】在树莓派上搭建Web站点

目录 1.概述 2.使用 Raspberry Pi Imager 安装 Raspberry Pi OS 3.设置 Apache Web 服务器 3.1测试 web 站点 3.2安装静态样例站点 3.3将web站点发布到公网 3.4安装 Cpolar 3.5cpolar进行token认证 3.6生成cpolar随机域名网址 3.7生成cpolar二级子域名 3.8将参数保存…

linux 下,Java由Java8升级到Java11,Java不更新版本号

在ES对接过程,springboot3进行对接,需要将Java升级到11版本。首先下载安装选好的11版本Java,在linux下解压后,配置/etc/profile export JAVA_HOME/root/SJL/jdk-11.0.22 然后保存,执行文件source /etc/profile&#…

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…

【机器学习】机器学习与电商推荐系统的融合应用与性能优化新探索

文章目录 引言第一章:机器学习在电商推荐系统中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 特征工程 1.2 模型选择1.2.1 协同过滤1.2.2 矩阵分解1.2.3 基于内容的推荐1.2.4 混合推荐 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化器 …

根据后端返回的省市区重新封装树结构(省市区通过children表示)

对比图(截取部分): 注:先看分步,最后会附上完整代码(如果有用,可以给小编点个赞吗?十分感谢) 1.首先将前端返回相同的省份只展示一次 const obj {}; let keyList []r…

最新简约美观的网址网站引导页HTML源码

最新简约美观的网址网站引导页HTML源码 带一言 随机大图 源码下载:https://download.csdn.net/download/m0_66047725/89487135 更多资源下载:关注我。

分布式数据库HBase:从零开始了解列式存储

在接触过大量的传统关系型数据库后你可能会有一些新的问题: 无法整理成表格的海量数据该如何储存? 在数据非常稀疏的情况下也必须将数据存储成关系型数据库吗? 除了关系型数据库我们是否还有别的选择以应对Web2.0时代的海量数据? 如果你也曾经想到过这些问题, 那么HBase将是…

【教程】lighttpd配置端口反向代理

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 1、修改配置文件: sudo vim /etc/lighttpd/lighttpd.conf2、先添加mod_proxy: 3、然后添加端口映射: 4、保存&…