ElasticSearch8 - 基础概念和映射

前言

写这篇东西,是因为官方文档看着太痛苦,于是乎想用大白话来聊聊 ElasticSearc (下面都简称ES)。所以下文对于 ES 一些概念的表述可能会与官方有出入,所以需要准确的表述和详细定义的,请跳转官方文档。我也尽量贴上官方的链接。

前置知识:因为下文会使用 mysql 的一些概念来描述,所以没学过的不建议看文本。

本文基于 ES 8.12

ES 基础概念

ES 是一个搜索引擎。重点是大数据搜索,如果是传统的 CRUD,请考虑关系型数据库。

下面来了解几个 ES 的基础概念

索引(index)

Index modules | Elasticsearch Guide [8.12] | Elastic

类比 mysql 的表,但又与表有很大区别

mysql:创建表需要先定义表字段,再进行数据插入。并且如果添加新字段,需要先修改表结构,再进行数据插入。

ES:索引无需预先定义字段(ES 里面叫映射),可在插入数据时动态添加字段(这叫动态映射,后面讲)

文档类型(type)

ES7 开始,文档类型只有默认的 _doc 了,我没用过旧版,所以略…

文档(document)

类比 mysql 的表的一条数据。

映射(mapping)

Mapping | Elasticsearch Guide [8.12] | Elastic

类比 mysql 的表字段,不同类型的字段,存储和查找会有区别

查看索引的映射

-- 查看映射(索引名为 my-index 的映射)
GET /my-index/_mappings
-- 查看映射的某个字段(索引名为 my-index 的字段 age 的映射)
GET /my-index/_mapping/field/age

动态映射

Dynamic field mapping | Elasticsearch Guide [8.12] | Elastic

ES 与传统关系型数据库不同,创建索引(类比 mysql 的表)时,不需要指定字段,在插入数据时,会自动创建字段和判断字段的类型,这就是动态映射。

动态映射默认的开启的,可以通过 dynamic 参数来修改。dynamic | Elasticsearch Guide [8.12] | Elastic

以下是不同 dynamic 参数对 json 数据类型的映射

JSON 数据类型dynamic: truedynamic: runtime
nullNo field addedNo field added
true or falsebooleanboolean
doublefloatfloat
longlonglong
objectobjectNo field added
array取决于数组中的第一个非 null 值取决于数组中的第一个非 null 值
日期类型的 stringdatedate
数字类型的 stringfloat or longdouble or long
其他类型的 stringtext with a .keyword sub-fieldkeyword

注意:默认的数字检测是关闭的,也就是在 没有映射 的情况下,插入 666 字符串是识别的成字符串的。如果已经配置了映射字段是 long 类型,插入 666 字符串才会被识别为数字

日期检测:
默认的日期检测格式有 yyyy/MM/dd HH:mm:ss||yyyy/MM/dd
也就是 2024/01/01 12:00:00 或者 2024/01/01 ,但是 2024-01-01 格式也行, 2024-01-01 12:00:00 不可以

自定义日期检测

PUT my-index
{
  "mappings": {
    "dynamic_date_formats": [ "yyyy/MM", "MM/dd/yyyy"]
    // 或者用
    "dynamic_date_formats": [ "yyyy/MM|MM/dd/yyyy"]
  }
}

两者的区别在于,[ "yyyy/MM", "MM/dd/yyyy"] 第一次插入数据,匹配到哪种,以后都用这种检测。而 [ "yyyy/MM|MM/dd/yyyy"] 则是两种格式都能用

显式映射

创建索引时添加映射

不需要搜索的字段,建议用 index: false 属性
index | Elasticsearch Guide [8.12] | Elastic

PUT /my-index
{
  "mappings": {
    "properties": {
      "age":    { "type": "integer" },  
      "email":  { "type": "keyword" , "index": false }, 
      "name":   { "type": "text"  }     
    }
  }
}

向现有映射添加字段

PUT /my-index/_mapping
{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}

修改现有映射

除了支持的映射参数外,您不能更改现有字段的映射或字段类型。更改现有字段可能会使已索引的数据无效。

如果需要更改字段的映射,请使用正确的映射创建一个新索引,并将数据重新索引到该索引中。

说人话就是:ES 是用来搜索的,官方不建议修改字段映射。不比关系数据库,ES 更改字段的映射很麻烦,跟重新建一个索引把数据导进去差不多(官方也建议这么玩)

总结

本文用大白话讲了 ES 的几个基本概念和映射的操作,旨在让小白能快速了解 ES,如果文章有错误的地方,欢迎评论区指出。

参考资料

Elasticsearch Mapping类型修改 - 知乎 (zhihu.com)

  • 29
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及概念 6 1.3.2 JSON介绍 10 1.4 安装配置 12 1.4.1 安装Java 12 1.4.2 安装Elasticsearch 12 1.4.3 配置 13 1.4.4 运行 15 1.4.5 停止 17 1.4.6 作为服务 17 1.4.7 版本升级 19 1.5 对外接口 21 1.5.1 API约定 22 1.5 .2 REST介绍 25 1.5.3 Head插件安装 26 1.5.4 创建库 27 1.5.5 插入数据 28 1.5.6 修改文档 28 1.5.7 查询文档 29 1.5.8 删除文档 29 1.5.9 删除库 30 1.6 Java接口 30 1.6.1 Java接口说明 30 1.6.2 创建索引文档 33 1.6.3 增加文档 34 1.6.4 修改文档 35 1.6.5 查询文档 35 1.6.6 删除文档 35 1.7 小结 36 第2章 索引 37 2.1 索引管理 37 2.1.1 创建索引 37 2.1.2 删除索引 39 2.1.3 获取索引 39 2.1.4 打开/关闭索引 40 2.2 索引映射管理 41 2.2.1 增加映射 41 2.2.2 获取映射 44 2.2.3 获取字段映射 45 2.2.4 判断类型是否存在 46 2.3 索引别名 46 2.4 索引配置 51 2.4.1 更新索引配置 51 2.4.2 获取配置 52 2.4.3 索引分析 52 2.4.4 索引模板 54 2.4.5 复制配置 55 2.4.6 重建索引 56 2.5 索引监控 60 2.5.1 索引统计 60 2.5.2 索引分片 62 2.5.3 索引恢复 63 2.5.4 索引分片存储 64 2.6 状态管理 64 2.6.1 清除缓存 64 2.6.2 索引刷新 64 2.6.3 冲洗 65 2.6.4 合并索引 65 2.7 文档管理 66 2.7.1 增加文档 66 2.7.2 更新删除文档 69 2.7.3 查询文档 73 2.7.4 多文档操作 76 2.7.5 索引词频率 80 2.7.6 查询更新接口 83 2.8 小结 87 第3章 映射 88 3.1 概念 88 3.2 字段数据类型 90 3.2.1 核心数据类型 91 3.2.2 复杂数据类型 96 3.2.3 地理数据类型 100 3.2.4 专门数据类型 106 3.3 元字段 108 3.3.1 _all字段 109 3.3.2 _field_names字段 109 3.3.3 _id字段 110 3.3.4 _index字段 110 3.3.5 _meta字段 111 3.3.6 _parent字段 111 3.3.7 _routing字段 112 3.3.8 _source字段 114 3.3.9 _type字段 115 3.3.10 _uid字段 115 3.4 映射参数 116 3.4.1 analyzer参数 116 3.4.2 boost参数 118 3.4.3 coerce参数 119 3.4.4 copy_to参数 120 3.4.5 doc_values参数 121 3.4.6 dynamic参数 122 3.4.7 enabled参数 122 3.4.8 fielddata参数 123 3.4.9 format参数 126 3.4.10 geohash参数 128 3.4.11 geohash_precision参数 129 3.4.12 geohash_prefix参数 130 3.4.13 ignore_above参数 131 3.4.14 ignore_malformed参数 131 3.4.15 include_in_all参数 132 3.4.16 index参数 133 3.4.17 index_options参数 133 3.4.18 lat_lon参数 134 3.4.19 fields参数 135 3.4.20 norms参数 136 3.4.21 null_value参数 137 3.4.22 position_increment_gap参数 137 3.4.23 precision_step参数 138 3.4.24 properties参数 138 3.4.25 search_analyzer参数 139 3.4.26 similarity参数 140 3.4.27 store参数 141 3.4.28 term_vector参数 141 3.5 动态映射 142 3.5.1 概念 142 3.5.2 _default_映射 143 3.5.3 动态字段映射 143 3.5.4 动态模板 145 3.5.5 重写默认模板 148 3.6 小结 148 第4章 搜索 149 4.1 深入搜索 149 4.1.1 搜索方式 149 4.1.2 重新评分 153 4.1.3 滚动查询请求 155 4.1.4 隐藏内容查询 158 4.1.5 搜索相关函数 161 4.1.6 搜索模板 164 4.2 查询DSL 167 4.2.1 查询和过滤的区别 167 4.2.2 全文搜索 168 4.2.3 字段查询 179 4.2.4 复合查询 183 4.2.5 连接查询 188 4.2.6 地理查询 190 4.2.7 跨度查询 197 4.2.8 高亮显示 200 4.3 简化查询 203 4.4 小结 206 第5章 聚合 207 5.1 聚合的分类 207 5.2 度量聚合 209 5.2.1 平均值聚合 209 5.2.2 基数聚合 211 5.2.3 最大值聚合 213 5.2.4 最小值聚合 214 5.2.5 和聚合 214 5.2.6 值计数聚合 215 5.2.7 统计聚合 215 5.2.8 百分比聚合 215 5.2.9 百分比分级聚合 216 5.2.10 最高命中排行聚合 217 5.2.11 脚本度量聚合 217 5.2.12 地理边界聚合 221 5.2.13 地理重心聚合 222 5.3 分组聚合 223 5.3.1 子聚合 224 5.3.2 直方图聚合 226 5.3.3 日期直方图聚合 230 5.3.4 时间范围聚合 233 5.3.5 范围聚合 234 5.3.6 过滤聚合 235 5.3.7 多重过滤聚合 236 5.3.8 空值聚合 238 5.3.9 嵌套聚合 239 5.3.10 采样聚合 240 5.3.11 重要索引词聚合 242 5.3.12 索引词聚合 245 5.3.13 总体聚合 251 5.3.14 地理点距离聚合 251 5.3.15 地理散列网格聚合 253 5.3.16 IPv4范围聚合 255 5.4 管道聚合 257 5.4.1 平均分组聚合 259 5.4.2 移动平均聚合 261 5.4.3 总和分组聚合 262 5.4.4 总和累计聚合 262 5.4.5 最大分组聚合 264 5.4.6 最小分组聚合 265 5.4.7 统计分组聚合 266 5.4.8 百分位分组聚合 268 5.4.9 差值聚合 269 5.4.10 分组脚本聚合 273 5.4.11 串行差分聚合 275 5.4.12 分组选择器聚合 276 5.5 小结 277 第6章 集群管理 278 6.1 集群节点监控 278 6.1.1 集群健康值 278 6.1.2 集群状态 279 6.1.3 集群统计 280 6.1.4 集群任务管理 280 6.1.5 待定集群任务 281 6.1.6 节点信息 281 6.1.7 节点统计 282 6.2 集群分片迁移 283 6.3 集群节点配置 284 6.3.1 主节点 285 6.3.2 数据节点 286 6.3.3 客户端节点 286 6.3.4 部落节点 287 6.4 节点发现 287 6.4.1 主节点选举 288 6.4.2 故障检测 288 6.5 集群平衡配置 289 6.5.1 分片分配设置 289 6.5.2 基于磁盘的配置 290 6.5.3 分片智能分配 291 6.5.4 分片配置过滤 292 6.5.5 其他集群配置 293 6.6 小结 293 第7章 索引分词器 294 7.1 分词器的概念 294 7.2 中文分词器 298 7.3 插件 300 7.3.1 插件管理 301 7.3.2 插件安装 301 7.3.3 插件清单 302 7.4 小结 304 第8章 高级配置 305 8.1 网络相关配置 305 8.1.1 本地网关配置 305 8.1.2 HTTP配置 306 8.1.3 网络配置 307 8.1.4 传输配置 308 8.2 脚本配置 310 8.2.1 脚本使用 311 8.2.2 脚本配置 313 8.3 快照和恢复配置 318 8.4 线程池配置 324 8.5 索引配置 326 8.5.1 缓存配置 326 8.5.2 索引碎片分配 329 8.5.3 合并 332 8.5.4 相似模块 332 8.5.5 响应慢日志监控 333 8.5.6 存储 335 8.5.7 事务日志 336 8.6 小结 337 第9章 告警、监控和权限管理 338 9.1 告警 338 9.1.1 安装 338 9.1.2 结构 339 9.1.3 示例 352 9.1.4 告警输出配置 354 9.1.5 告警管理 355 9.2 监控 356 9.2.1 安装 356 9.2.2 配置 357 9.3 权限管理 360 9.3.1 工作原理 361 9.3.2 用户认证 361 9.3.3 角色管理 366 9.3.4 综合示例 368 9.4 小结 369 第10章 ELK应用 370 10.1 Logstash 370 10.1.1 配置 371 10.1.2 插件管理 374 10.2 Kibana配置 377 10.2.1 Discover 379 10.2.2 Visualize 381 10.2.3 Dashboard 383 10.2.4 Settings 386 10.3 综合示例 387 10.4 小结 390 附录 Elasticsearch 5.0的特性与改进 391
### 回答1: 《OpenGL编程指南》第8版是一本经典的OpenGL编程指南,主要介绍了OpenGL的基本概念基础知识和高级技术。该书中包含了大量的示例代码,用于帮助读者理解和应用OpenGL编程。 在阅读《OpenGL编程指南》第8版时,读者可以逐步学习OpenGL的各个方面,包括初始化OpenGL环境、绘制基本图形、使用着色器编程、实现纹理映射、实现深度测试、使用缓冲区对象等。同时,书中也讲解了如何优化OpenGL程序的性能,如使用顶点缓冲对象、索引缓冲对象等。 书中的示例代码非常详细,通过逐行解释和注释,读者可以清楚地了解代码的具体功能和实现方式。读者可以将这些示例代码用作学习参考,通过修改和调试这些代码,提升对OpenGL编程的理解和实践能力。 《OpenGL编程指南》第8版还介绍了一些OpenGL的扩展和新特性,如OpenGL核心模式、OpenGL ES、OpenGL 3.0和OpenGL 4.0等。这些扩展和新特性可以帮助开发者实现更加复杂和高效的图形渲染效果。 总之,通过阅读《OpenGL编程指南》第8版并运行其中的示例代码,读者能够系统地学习和掌握OpenGL编程的基本原理和技巧,为图形渲染开发提供了强大的工具和知识支持。 ### 回答2: 《OpenGL编程指南》第8版是一本针对OpenGL编程的经典教材,它提供了许多基础和高级的OpenGL编程示例代码和指南。下面我会用中文回答一些关于该书中代码的问题。 首先,这本书中的代码通过C/C++语言来实现OpenGL的相关功能。它介绍了OpenGL的一般概念基础知识,并提供了许多例子帮助读者理解和掌握OpenGL的编程技术。 在第8版中,该书包含了一些新的特性和技术,例如更多的渲染技术、阴影技术、着色器编程等。这些新的内容对于有一定OpenGL编程经验的读者来说是非常有用的,可以帮助他们提升自己的OpenGL编程能力。 在书中的代码示例中,通过使用OpenGL库函数来实现一些基本的图形绘制和渲染功能。例子中包含了使用OpenGL绘制基本形状(如点、线、三角形)的代码,以及一些高级的图形渲染效果的实现(如纹理映射、光照效果等)。 此外,书中的代码还涉及到了一些OpenGL的辅助库,如GLUT、GLFW等。这些库可以简化OpenGL的编程过程,提供更方便的接口和功能,帮助读者更快速地完成OpenGL程序的编写。 总的来说,通过学习《OpenGL编程指南》第8版的代码示例,读者能够了解和掌握OpenGL编程的基本原理和技术,进一步提升自己的OpenGL编程水平。希望这本书能对喜欢OpenGL编程的人有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值