首页 > 其他分享 >ElasticSearch - 基础概念和映射

ElasticSearch - 基础概念和映射

时间:2024-03-19 10:15:43浏览次数:15  
标签:index 映射 索引 MM yyyy 概念 ElasticSearch ES

前言

写这篇东西,是因为官方文档看着太痛苦,于是乎想用大白话来聊聊 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: true dynamic: runtime
null No field added No field added
true or false boolean boolean
double float float
long long long
object object No field added
array 取决于数组中的第一个非 null 值 取决于数组中的第一个非 null 值
日期类型的 string date date
数字类型的 string float or long double or long
其他类型的 string text with a .keyword sub-field keyword

注意:默认的数字检测是关闭的,也就是在 没有映射 的情况下,插入 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)

标签:index,映射,索引,MM,yyyy,概念,ElasticSearch,ES
From: https://www.cnblogs.com/konghuanxi/p/18082114

相关文章

  • Elasticsearch7基础2-文档基础操作
    浏览器:127.0.0.1:5601找到DevTools1.集群运行状况检查GET/_cat/health?v2.获取集群中的节点列表GET/_cat/nodes?v3.列出所有索引GET/_cat/indices?vindex索引操作1.1新建Index,可以直接向Elastic服务器发出PUT请求PUT/goods创建了一个goods的Index服务器......
  • 学习笔记——C语言基本概念&运算符——(2)
    目录一、运算符1.1赋值运算符1.2算数运算符 1.3关系运算符1.5位运算符1.6 自增自减运算符1.7  复合运算符1.8逗号运算符1.9 三目运算符1.10 sizeof运算符附录:运算符优先性表一、运算符1>.按照操作数目分类:单目运算符,双目运算符,三目运算符。2>......
  • K8s的概念
    Kubernetes(简称K8s)是一个开源的容器编排系统,由Google开发,用于管理容器化的应用程序。K8s在Docker技术的基础上,提供了应用部署、资源调度、服务发现和动态伸缩等一系列功能,提高了大规模容器集群管理的便捷性。它能够自动化地部署、扩展和管理容器应用,还可以监控容器......
  • 【机器学习-01】机器学习基本概念与建模流程
      机器学习的过程本质上是一个不断通过数据训练来提升模型在对应评估指标上表现的过程。在此过程中,为模型提供有效的反馈并基于这些反馈进行持续的调整是至关重要的。只有当这个过程顺利进行时,模型才能得到有效的训练,机器才能真正实现学习。  虽然从广义上理解机器学习......
  • 技术笔记(11)相关概念理解
    技术笔记(11)相关概念理解希望实现的功能或目标:了解学习移动端开发的相关概念‍‍实现过程中产生的疑惑:什么是SDK,JDK?安卓SDK内提供了哪些工具?部署的定义?软件开发生命周期?后处理?‍‍对疑惑的解答:SDK和JDKSDK定义:SoftwareDevelopmentKit,软件开发工......
  • 关于进程同步与互斥的一些概念(锁、cas、futex)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  最近为了实现在androidlinuxkernel上,是的bionicc和glibc的sem_相关的信号量接口能够相互调用的功能(例如:用bioniccwait,用glibcawake),......
  • 异常机制(概念、出现原因 、处理的机制 、处理的能力)
    Day28下1异常机制异常机制理解图学习路线:异常的概念异常的出现原因异常处理的机制异常处理的能力异常概念​异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常......
  • 通信基础概念
    参考视频:https://www.bilibili.com/video/BV14o4y1Y7A1?p=1&vd_source=432ba293ecfc949a4174ab91ccc526d6并行通信:并行通信:计算机与I/O设备之间,通过多条传输线,可以同时传输多个bit位的信号。如下图所示:串行通信:串行通信:计算机与I/O设备之间,同一时刻,只能传输一个bit位的信号。......
  • AI回答记录:python中有重载与重写的概念吗?
    问:python中有重载与重写的概念吗?GPT4-turbo:在Python中,严格来说没有像其他一些编程语言(如Java、C++)那样的重载(Overloading)机制,但是可以通过其他方式实现类似的功能。Python中有重写(Overriding)的概念。重载(Overloading):Python不支持传统的方法重载,即在同一个类中定义多个同名......
  • 比特币,区块链及相关概念简介(三)
    目录什么是区块链区块链关键特点区块链存在哪里区块链相关的工作主要是做什么呢可以有多个区块链吗区块链网络节点区块链网络有延迟吗区块链和Rust区块链新技术区块链相关网站该系列文章链接以下内容结合了chatgpt3.5以及网络文章。用于学习记录。简介:什么是......