当前位置: 首页 > news >正文

【Elasticsearch】Mapping概述

以下是Elasticsearch中提到的关于Mapping的各模块概述:

 

---

1.Dynamic mapping(动态映射)

动态映射是指Elasticsearch在索引文档时,自动检测字段类型并创建字段映射的过程。当你首次索引一个文档时,Elasticsearch会根据字段的值类型(如字符串、数字、日期等)自动推断字段的映射类型。例如:

• 字符串字段会被自动映射为`text`或`keyword`类型。

• 数字字段会被映射为`integer`、`long`等类型。

• 日期字段会被映射为`date`类型。

动态映射的优点是方便快捷,但缺点是可能导致意外的字段类型推断,因此在生产环境中通常建议显式定义映射。

---

2.Explicit mapping(显式映射)

显式映射是指在索引创建时,手动定义字段的映射类型和参数。通过显式映射,你可以精确控制字段的存储方式、分析器、是否可搜索等属性。例如:

```json

PUT /my_index

{

  "mappings": {

    "properties": {

      "name": { "type": "text" },

      "age": { "type": "integer" },

      "created_at": { "type": "date" }

    }

  }

}

```

显式映射适用于需要对字段进行精细控制的场景,例如自定义分词器、设置字段是否存储等。

---

3.Runtime fields(运行时字段)

运行时字段是一种在查询时动态计算的字段,而不是在索引时存储的字段。运行时字段可以基于已有的字段进行计算或转换,例如:

• 将字符串字段转换为日期格式。

• 根据多个字段的值计算一个新字段。

运行时字段的优点是灵活性高,但可能会对查询性能产生一定影响,因为每次查询都需要动态计算字段值。

---

4.Field data types(字段数据类型)

字段数据类型定义了字段可以存储的数据格式和行为。Elasticsearch支持多种数据类型,包括:

• 核心数据类型:如`text`、`keyword`、`integer`、`float`、`date`等。

• 复杂数据类型:如`object`、`nested`、`geo_point`等。

• 特殊数据类型:如`ip`、`binary`、`completion`等。

选择合适的数据类型对于优化存储和查询性能至关重要。

---

5.Metadata fields(元数据字段)

元数据字段是Elasticsearch自动为每个文档添加的特殊字段,用于存储文档的元信息。常见的元数据字段包括:

• `_id`:文档的唯一标识符。

• `_index`:文档所属的索引名称。

• `_type`:文档的类型(在7.x及以后版本中已被废弃)。

• `_source`:存储原始JSON文档。

• `_timestamp`:文档的创建时间戳。

这些字段通常用于管理和查询文档的元信息。

---

6.Mapping parameters(映射参数)

映射参数是用于定义字段行为的额外配置。常见的映射参数包括:

• `index`:指定字段是否可搜索。

• `store`:指定字段是否存储在索引中。

• `analyzer`:指定字段使用的分词器。

• `norms`:是否启用字段的规范化。

• `copy_to`:将字段的值复制到另一个字段。

通过这些参数,可以对字段的行为进行更细致的控制。

---

7.Mapping limit settings(映射限制设置)

映射限制设置用于控制索引的映射复杂度,以防止索引过大或过于复杂。常见的限制设置包括:

• `index.mapping.nested_fields.limit`:限制嵌套字段的数量。

• `index.mapping.nested_objects.limit`:限制嵌套对象的深度。

• `index.mapping.total_fields.limit`:限制索引中字段的总数。

• `index.mapping.depth.limit`:限制字段嵌套的深度。

这些设置有助于优化索引性能和资源使用。

---

8.Removal of mapping types(移除映射类型)

在Elasticsearch 7.x及以后版本中,`_type`字段已被废弃并移除。在早期版本中,`_type`用于区分同一索引中的不同文档类型,但在新版本中,Elasticsearch建议使用单独的索引来代替类型的概念。移除`_type`的主要原因是简化索引结构,减少复杂性,并提高性能。

Elasticsearch 的mapping(映射)是定义文档及其字段如何存储和索引的过程。它类似于传统数据库中的表结构定义,但在 Elasticsearch 中,映射更加灵活且具有动态性。以下是关于 Elasticsearch 映射的详细说明,包括其核心概念、主要功能以及如何使用它来优化数据存储和查询性能。


---

1.映射的作用
在 Elasticsearch 中,映射定义了以下几个关键内容:

• 字段的存储方式:字段的数据类型(如`text`、`keyword`、`integer`、`date`等)。

• 字段的索引方式:字段是否可搜索、是否存储原始值、是否进行分词等。

• 元数据字段:如`_source`、`_id`、`_index`等,用于管理文档的元信息。

• 字段的额外配置:如是否启用规范化(`norms`)、是否支持多字段(`multi-fields`)等。


---

2.映射的类型
Elasticsearch 提供了多种映射方式,以满足不同的需求。


2.1 动态映射(Dynamic Mapping)
动态映射允许 Elasticsearch 自动检测字段的数据类型并创建映射。当你首次索引一个文档时,Elasticsearch 会根据字段的值类型自动推断字段的映射类型。例如:

• 字符串字段会被自动映射为`text`或`keyword`。

• 数字字段会被映射为`integer`或`long`。

• 日期字段会被映射为`date`。

优点:

• 方便快捷,适合快速开发和原型设计。

• 自动适应新字段,无需手动定义。

缺点:

• 可能导致意外的字段类型推断。

• 不适合对性能和存储有严格要求的场景。

动态模板(Dynamic Templates):
你可以通过动态模板定义自定义映射规则,基于字段名称或数据类型匹配条件来应用特定的映射。例如:

```json
PUT /my_index
{
  "mappings": {
    "dynamic_templates": [
      {
        "strings_as_keywords": {
          "match_mapping_type": "string",
          "mapping": { "type": "keyword" }
        }
      }
    ]
  }
}
```

在上述例子中,所有字符串字段都会被自动映射为`keyword`类型。


---

2.2 显式映射(Explicit Mapping)
显式映射允许你在索引创建时手动定义字段的映射类型和参数。这种方式提供了更高的灵活性和控制力。例如:

```json
PUT /my_index
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "age": { "type": "integer" },
      "created_at": { "type": "date" },
      "location": { "type": "geo_point" }
    }
  }
}
```


优点:

• 精确控制字段的存储和索引方式。

• 避免动态映射可能导致的类型推断错误。

• 适合生产环境和对性能要求较高的场景。

缺点:

• 需要提前定义字段,不够灵活。


---

2.3 运行时字段(Runtime Fields)
运行时字段是一种在查询时动态计算的字段,而不是在索引时存储的字段。它们可以基于已有的字段进行计算或转换。例如:

```json
PUT /my_index/_mapping
{
  "runtime": {
    "day_of_week": {
      "type": "keyword",
      "script": "emit(doc['created_at'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
    }
  }
}
```

在上述例子中,`day_of_week`字段会在查询时动态计算文档的`created_at`字段对应的星期几。

优点:

• 灵活性高,无需重新索引即可添加新字段。

• 可以基于已有字段进行复杂计算。

缺点:

• 查询性能可能受到影响,因为每次查询都需要动态计算字段值。


---

3.映射的组件
Elasticsearch 的映射由以下几个关键组件组成:


3.1 字段(Fields)
字段是文档的基本单元,每个字段都有自己的数据类型。Elasticsearch 支持多种数据类型,包括:

• 核心数据类型:`text`、`keyword`、`integer`、`float`、`date`、`boolean`等。

• 复杂数据类型:`object`、`nested`、`array`等。

• 特殊数据类型:`geo_point`、`geo_shape`、`ip`、`completion`等。


3.2 元数据字段(Metadata Fields)
元数据字段是 Elasticsearch 自动为每个文档添加的特殊字段,用于存储文档的元信息。常见的元数据字段包括:

• `_id`:文档的唯一标识符。

• `_index`:文档所属的索引名称。

• `_source`:存储原始 JSON 文档。

• `_timestamp`:文档的创建时间戳。


3.3 映射参数(Mapping Parameters)
映射参数是用于定义字段行为的额外配置。常见的映射参数包括:

• `index`:指定字段是否可搜索。

• `store`:指定字段是否存储在索引中。

• `analyzer`:指定字段使用的分词器。

• `norms`:是否启用字段的规范化。

• `copy_to`:将字段的值复制到另一个字段。


3.4 多字段(Multi-Fields)
多字段允许你将同一个字段以不同的方式索引。例如,你可以将一个字符串字段同时索引为`text`和`keyword`,以满足全文搜索和排序/聚合的需求。例如:

```json
PUT /my_index
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "fields": {
          "keyword": { "type": "keyword" }
        }
      }
    }
  }
}
```

在上述例子中,`name`字段被索引为`text`类型,同时通过`fields`添加了一个`keyword`多字段。


---

4.映射的管理
Elasticsearch 提供了多种工具和 API 来管理映射。


4.1 创建索引和映射
在创建索引时,可以显式定义映射:

```json
PUT /my_index
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "age": { "type": "integer" }
    }
  }
}
```

4.2 更新映射
使用Update Mapping API可以更新现有的映射。例如,添加新字段:

```json
PUT /my_index/_mapping
{
  "properties": {
    "email": { "type": "keyword" }
  }
}
```

4.3 获取映射
使用Get Mapping API可以查看索引的映射定义:

```json
GET /my_index/_mapping
```

---

5.防止映射爆炸
在 Elasticsearch 中,定义过多字段可能导致映射爆炸(Mapping Explosion),这可能会导致内存不足错误,并且很难恢复。为了避免这种情况,可以使用以下策略:

• 限制字段数量:通过设置`index.mapping.total_fields.limit`参数限制索引中字段的总数。

• 限制嵌套深度:通过设置`index.mapping.depth.limit`参数限制字段嵌套的深度。

• 谨慎使用动态映射:避免每条新文档都引入新字段,尽量在索引创建时显式定义字段。


---

6.移除映射类型(Removal of Mapping Types)
在 Elasticsearch 7.x 及更高版本中,`_type`字段已被废弃并移除。在早期版本中,`_type`用于区分同一索引中的不同文档类型,但在新版本中,Elasticsearch 建议使用单独的索引来代替类型的概念。移除`_type`的主要原因是简化索引结构,减少复杂性,并提高性能。


---

7.映射的优化建议
为了优化 Elasticsearch 的映射,可以遵循以下最佳实践:

• 显式定义字段:尽量使用显式映射,避免动态映射可能导致的类型推断错误。

• 使用多字段:根据需求将字段索引为多种类型,以满足不同的查询需求。

• 限制字段数量:避免过多字段导致映射爆炸。

• 选择合适的数据类型:例如,使用`keyword`而非`text`进行排序或聚合。

• 使用运行时字段:在不重新索引的情况下进行模式更改。


---

总结
Elasticsearch 的映射是定义文档结构和字段行为的核心机制。通过动态映射、显式映射和运行时字段,你可以灵活地管理数据的存储和索引方式。合理设计映射

---

如果你对某个模块有更深入的问题,欢迎继续提问!

 

相关文章:

【Elasticsearch】Mapping概述

以下是Elasticsearch中提到的关于Mapping的各模块概述: --- 1.Dynamic mapping(动态映射) 动态映射是指Elasticsearch在索引文档时,自动检测字段类型并创建字段映射的过程。当你首次索引一个文档时,Elasticsearch会根…...

GPT-4o悄然升级:能力与个性双突破,AI竞技场再掀波澜

在大模型竞技场中,GPT-4o悄悄发布了全新版本,凭借其卓越的多项能力,迅速超越了DeepSeek-R1,成功登上并列第一的位置。这次更新不仅在数学(第6名)上有所突破,还在创意写作、编程、指令遵循、长文…...

如何选择合适的超参数来训练Bert和TextCNN模型?

选择合适的超参数来训练Bert和TextCNN模型是一个复杂但关键的过程,它会显著影响模型的性能。以下是一些常见的超参数以及选择它们的方法: 1. 与数据处理相关的超参数 最大序列长度(max_length) 含义:指输入到Bert模…...

C# SpinLock 类 使用详解

总目录 前言 SpinLock 是 C# 中一种轻量级的自旋锁,属于 System.Threading 命名空间,专为极短时间锁竞争的高性能场景设计。它通过忙等待(自旋)而非阻塞线程来减少上下文切换开销,适用于锁持有时间极短(如…...

【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题

【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题问题描述:解决方法方法一:手动中断并重启下载方法二:使用 Bash 脚本自动化下载在…...

机器学习所需要的数学知识【01】

总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件...

4.【线性代数】——矩阵的LU分解

四 矩阵的LU分解 1. AB的逆矩阵2. 转置矩阵3. ALU3.1 2x2矩阵3.2 3x3矩阵3.3 nxn的矩阵分解的次数? 1. AB的逆矩阵 { ( A B ) ( B − 1 A − 1 ) I ( B − 1 A − 1 ) ( A B ) I ⇒ ( A B ) − 1 B − 1 A − 1 \begin{cases} (AB)(B^{-1}A^{-1}) I\\ (B^{-1}A^…...

【清晰教程】本地部署DeepSeek-r1模型

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面-CSDN博客 目录 Ollama 安装Ollama DeepSeek-r1模型 安装DeepSeek-r1模型 Ollama Ollama 是一个开源工具,专注于简化大型语言模型(LLMs)的本地部署和管理。它允许用户在本地计算机…...

Spring Cloud工程搭建

目录 工程搭建 搭建父子工程 创建父工程 Spring Cloud版本 创建子项目-订单服务 声明项⽬依赖 和 项⽬构建插件 创建子项目-商品服务 声明项⽬依赖 和 项⽬构建插件 工程搭建 因为拆分成了微服务,所以要拆分出多个项目,但是IDEA只能一个窗口有一…...

使用Redis实现分布式锁,基于原本单体系统进行业务改造

一、单体系统下&#xff0c;使用锁机制实现秒杀功能&#xff0c;并限制一人一单功能 1.流程图&#xff1a; 2.代码实现&#xff1a; Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderSe…...

【MediaTek】 T750 openwrt-23.05编 cannot find dependency libexpat for libmesode

MediaTek T750 T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。 MediaTek T750 平台是一款综合的芯片组,集成了 5G SoC MT6890、12nm 制程…...

CHARMM-GUI EnzyDocker: 一个基于网络的用于酶中多个反应状态的蛋白质 - 配体对接的计算平台

❝ "CHARMM-GUI EnzyDocker for Protein−Ligand Docking of Multiple Reactive States along a Reaction Coordinate in Enzymes"介绍了 CHARMM-GUI EnzyDocker&#xff0c;这是一个基于网络的计算平台&#xff0c;旨在简化和加速 EnzyDock 对接模拟的设置过程&…...

c# 2025/2/17 周一

16. 《表达式&#xff0c;语句详解4》 20 未完。。 表达式&#xff0c;语句详解_4_哔哩哔哩_bilibili...

vite【详解】常用配置 vite.config.js / vite.config.ts

官网 https://cn.vitejs.dev/guide/ vite 常用配置 Vite 配置文件通常是 vite.config.js &#xff08;使用 CommonJS 语法&#xff09;或者 vite.config.ts&#xff08;使用 TypeScript 语法&#xff09;&#xff0c;默认内容为 import { defineConfig } from vite import vue…...

最新智能优化算法: 阿尔法进化(Alpha Evolution,AE)算法求解23个经典函数测试集,MATLAB代码

一、阿尔法进化算法 阿尔法进化&#xff08;Alpha Evolution&#xff0c;AE&#xff09;算法是2024年提出的一种新型进化算法&#xff0c;其核心在于通过自适应基向量和随机步长的设计来更新解&#xff0c;从而提高算法的性能。以下是AE算法的主要步骤和特点&#xff1a; 主…...

用于可靠工业通信的5G-TSN集成原型:基于帧复制与消除可靠性的研究

论文标题 中文标题&#xff1a;用于可靠工业通信的5G-TSN集成原型&#xff1a;基于帧复制与消除可靠性的研究 英文标题&#xff1a;5G-TSN Integrated Prototype for Reliable Industrial Communication Using Frame Replication and Elimination for Reliability 作者信息 …...

HaProxy源码安装(Rocky8)

haproxy具有高性能、高可用性、灵活的负载均衡策略和强大的将恐和日志功能&#xff0c;是法国开发者 威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件&#xff0c;是一款具 备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&a…...

shell脚本备份MySQL数据库和库下表

目录 注意&#xff1a; 一.脚本内容 二.执行效果 三.创建定时任务 注意&#xff1a; 以下为对MySQL5.7.42版本数据库备份shell脚本参考运行备份的机器请确认mysqldump版本>5.7&#xff0c;否则备份参数--set-gtid-purgedOFF无效&#xff0c;考虑到一般数据库节点和备份…...

23. AI-大语言模型

文章目录 前言一、LLM1. 简介2. 工作原理和结构3. 应用场景4. 最新研究进展5. 比较 二、Transformer架构1. 简介2. 基本原理和结构3. 应用场景4. 最新进展 三、开源1. 开源概念2. 开源模式3. 模型权重 四、再谈DeepSeek 前言 AI‌ 一、LLM LLM&#xff08;Large Language Mod…...

Linux /dev/null

/dev/null 是 Linux 和类 Unix 系统中一个特殊且非常有用的设备文件&#xff0c;也被称为空设备。下面为你详细介绍它的特点、用途和使用示例。 特点 写入丢弃&#xff1a;当向 /dev/null 写入数据时&#xff0c;这些数据会被立即丢弃&#xff0c;不会被保存到任何地方&#…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...