05.Elasticsearch应用(五)
Elasticsearch应用(五)
1.目标
咱们这一章主要学习Mapping(映射)
2.介绍
Mapping是对索引库中文档的约束,类似于数据表结构,作用如下:
- 定义索引中的字段的名称
- 定义字段的数据类型,例如字符串,数字,布尔等
- 字段,倒排索引的相关配置(Analyzer)
3.映射类型
动态映射
介绍
在关系型数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段,类型,长度,主键等,最后才能基于表插入数据。而Elasticsearch中不需要定义Mapping映射,在文档写入Elasticsearch时,会根据文档自动识别类型,这种机制称之为动态映射
缺点
动态映射(Dynamic Mapping)的机制,使得我们无需手动定义Mappings,Elasticsearch会自动根据文档信息,推算出字段的类型。但是有时候会推算的不对,例如地理位置信息。当类型如果设置不对时,会导致一些功能无法正常运行,例如Range查询
自动识别的类型

静态映射
静态映射是在Elasticsearch中也可以实现定义好映射,包含文档的各字段类型,分词器等,这种方式称之为静态映射
4.常见的字段类型
| 核心类型 | 具体类型 | 说明 |
|---|---|---|
| 字符串类型 | text | 可分词的文本 |
| 不分词的字符串 | keyword | 精确值,例如:品牌,国家,IP地址等 不能被分词 |
| 整数类型 | long,integer,short,byte | 在ES中id应该是个字符串keyword而不是数值类型 |
| 浮点类型 | double,float,half_float,scaled_float | |
| 日期类型 | date,date_nanos | |
| 布尔类型 | boolean | |
| 数组类型 | array | 数组类型不存在,里面是什么就是很么类型 |
| 对象类型 | object | |
| 地理位置类型 | geo_point,geo_shape | |
| 补全类型 | completion | 自动补全功能所需要的类型 |
| 二进制类型 | binary | |
| 范围类型 | integer_range,float_range,long_range,double_range,date_range,ip_range | |
| JSON对象数组 | nested |
5.常见的Mapping属性
| 属性 | 含义 |
|---|---|
| type | 字段数据类型 |
| index | 是否创建索引,默认为true |
| analyzer | 使用那种分词器 |
| properties | 该字段的子字段 |
| copy_to | 字段拷贝,可以将当前字段拷贝到指定字段 |
| store | 是否单独存储。如果设置为true,则该字段能够单独查询 |
| boost | 控制算分 |
| coerce | |
| doc_values | |
| dynamic | 动态映射设置 |
| eager_global_ordinals | |
| enabled | |
| fielddata | |
| fields | |
| format | |
| ignore_above | |
| ignore_malformed | |
| index_options | 控制倒排索引记录的内容 |
| index_phrases | |
| index_prefixes | |
| meta | |
| normalizer | |
| norms | |
| null_value | 对NULL值进行搜索 |
| position_increment_gap | |
| search_analyzer | |
| similarity | |
| term_vector |
6.能否后期更改Mapping的字段类型
两种情况
- 新增字段
- 对已有字段修改(有数据写入后)
新增字段
- dynamic设为true时,一旦有新增字段的文档写入,Mapping也同时被更新
- dynamic设为false,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中
- dynamic设置成strict(严格控制策略),文档写入失败,抛出异常
对已有字段修改(有数据写入后)
- Lucene实现的倒排索引,—旦生成后,就不允许修改
- 如果希望改变字段类型,必须Reindex APl,重建索引
原因
- 如果修改了字段的数据类型,会导致已被索引的数据无法被搜索
- 但是如果是增加新的字段,就不会有这样的影响
总结

7.对已有字段的mapping修改
步骤
- 如果要推倒现有的映射, 你得重新建立一个静态索引
- 然后把之前索引里的数据导入到新的索引里
- 删除原创建的索引
- 为新索引起个别名, 为原索引名
索引数据迁移API
POST _reindex
{"source":{"index":"user"},"dest":{"index":"user2"}
}
使用别名兼容原有的索引
PUT /user/_alias/user
8.Dynamic Template
需求
我们可以使用动态模板来告诉es,一些字段需要动态映射成相关类型,例如根据类型来判断,或者只要是根据字段名称包含ip的,动态的给一个IP的类型,而这种思路就是es提供的动态模板,Dynamic templates
介绍
动态模板是针对某个具体的索引来设定的,即在创建某个具体的索引时指定
适用场景
- 根据ES自动识别字段类型的这个特性,去设置一些特殊字段的名称为某些特定的类型
- 设置所有字符串类型的字段都为 keyword
- is 开头的字符串都设置成为 boolean 类型
三种规则
- match_mapping_type
- match and unmatch
- path and path_unmatch
match_mapping_type
根据文档字段的类型进行动态映射。在这种方式下,会对JSON的数据类型进行动态定义es的数据类型。从前面,我们值JSON的数据是没有类型之分,所以es会动态根据数据本身的类型来进行映射
PUT es-learn-000002
{"mappings": {"dynamic_templates": [{"integers": {"match_mapping_type": "long","mapping": {"type": "integer"}}}]}
}
match and unmatch
根据名称的规则,来定义一些特定的动态映射,这便是动态模板的第二种方式match and unmatch。在这种方式下,字段名称的匹配支持正则表达式。match表示当字段名称符合的规则时应用,unmatch表示当字段符合规则时不应用这个动态映射
PUT es-learn-000003
{"mappings": {"dynamic_templates": [{"email_keyword": {"match": "*_email","mapping": {"type": "keyword"}}},{"ip_rule": {"match": "*_ip","unmatch": "long_*","mapping": {"type": "ip"}}}]}
}
注意
当我们插入嵌套的JSON的时候,动态映射的规则是应用在嵌套JSON里的对象
path_match and path_unmatch
我们知道JSON可以保存复杂的嵌套关系,那么如果我们想依据嵌套关系制定相关的动态映射的规则,该怎么处理呢?path_match和path_unmatch的用法同match和unmatch的用法相似,使用正则表达式来进行匹配。只是match匹配的是字段的值,而path_match匹配的是JSON的嵌套关系
以下这段代码想实现的效果是,name下的嵌套对象,并且不是middle名字的类型都为keyword
PUT es-learn-000005
{"mappings": {"dynamic_templates": [{"middle_name_key": {"path_match": "name.*","path_unmatch": "*.middle","mapping": {"type": "keyword"}}}]}
}
9.索引基础操作
创建索引的时候指定Mapping
PUT /[索引名称]
{"mappings":{"properties":{"字段名":{"type":"text","analyzer":"ik_smart"},"字段名2":{"type":"keyword","index":false},"字段名3":{"properties":{"子字段":{"type":"keyword"}}}} }
}
获取索引的字段Mapping
介绍
检索一个或多个字段的映射定义。如果您不需要索引的完整映射或索引包含大量字段,这将很有用
请求路径
GET /_mapping/field/[字段名]GET /[索引名]/_mapping/field/[字段名]
请求示例
GET publications/_mapping/field/title
GET publications/_mapping/field/author.id,abstract,name
GET publications/_mapping/field/a*
获取某个索引的映射信息
GET /索引名/_mapping
10.Mapping属性解读
字段拷贝(copy_to)
介绍
- 该参数允许将多个字段的值复制到copy_to的字段上
- copy_to的字段支持查询
- 如果有多个字段需要查询,可以尝试把多个字段的值拷贝到一个新字段上
- 可以将相同的值复制到多个字段, “copy_to”: [ “field_1”, “field_2” ]
示例
PUT /[索引名]
{"mappings":{"properties":{"name":{"type":"text","analyzer":"ik_max_word","copy_to":"all"},"business":{"type":"keyword","copy_to":"all"},"all":{"type":"text","analyzer":"ik_max_word"}}}
}
index
介绍
控制当前字段是否被索引,默认为true。如果设置为false,该字段不可被搜索
示例
PUT /[索引名]
{"mappings":{"properties":{"name":{"type":"text","index":false}}}
}
index_options
介绍
控制倒排索引记录的内容
可选值
- docs: 记录doc id
- freqs: 记录doc id和term frequencies(词频)
- positions: 记录doc id / term frequencies / term position
- offsets: doc id / term frequencies / term posistion / character offects
- 注意: text类型默认记录postions,其他默认为docs。记录内容越多,占用存储空间越大
示例
PUT /[索引名]
{"mappings":{"properties":{"name":{"type":"text","index_options":"offsets"}}}
}
null_value
介绍
需要对NULL值进行搜索,只有keyword类型支持设计Null_value
示例
PUT /[索引名]
{"mappings":{"properties":{"name":{"type":"keyword","null_value":"NULL"}}}
}
boost
介绍
在查询时,可以增加字段的算分,默认为1
请求格式
# 创建索引时候指定
PUT /<index>
{"mappings": {"properties": {"<field>": {"type": "text","boost": 2 }}}
}# 查询时指定
POST _search
{"query": {"match" : {"title": {"query": "quick brown fox","boost": 2}}}
}
注意
- 不提升prefix,range,fuzzy查询的分数
- 不建议使用index time提升。而是在search time时使用
fields
介绍
text字段类型不能被排序和聚合如果要text字段能被排序或聚合可以使用fields
请求格式
PUT /<index>
{"mappings": {"properties": {"<field>": {"type": "text","fields":{"<child_field>":{"type":"keyword"}}}}}
}
相关文章:
05.Elasticsearch应用(五)
Elasticsearch应用(五) 1.目标 咱们这一章主要学习Mapping(映射) 2.介绍 Mapping是对索引库中文档的约束,类似于数据表结构,作用如下: 定义索引中的字段的名称定义字段的数据类型ÿ…...
npm更换镜像
大家好!今天给大家分享的知识是如何更换npm镜像 前言 有时候在加载npm时有时会很慢,那是由于node安装插件是从国外服务器下载,受网络影响大,速度慢且可能出现异常,这时候就需要更换镜像,使插件的安装快捷&…...
野指针(C语言)
野指针 //概念:野指针就是指针指向的位置是不可知的(随机的,不正确的 //,没有明确限制的,空间还属于操作系统而不属于程序的) //野指针成因: //1.指针未初始化 #include <stdio.h> int main() { int* p;//局部变量指针未初始化,默认为随机值 //此时p指向的空间不…...
动物姿态识别(数据集+代码)
动物姿态识别是指利用计算机视觉和深度学习技术来识别动物的姿态,即确定动物身体的姿态、方向和位置等信息。这种技术可应用于动物行为研究、动物健康监测、智能养殖等领域。 动物姿态识别的关键技术包括图像处理、特征提取和分类器设计。首先,需要对动…...
JSON-handle工具安装及使用
目录 介绍下载安装简单操作 介绍 JSON-Handle 是一款非常好用的用于操作json的浏览器插件,对于开发人员和测试人员来说是一款很好用的工具,如果你还没有用过,请赶紧下载安装吧,下面是安装过程和具体使用。 下载安装 点击下载JSON…...
kali安装LAMP和DVWA
LANMP简介 LANMP是指一组通常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。 L:指Linux,一类Unix计算机操作…...
上门服务小程序|预约上门服务系统开发有哪些功能?
在现代快节奏的生活中,压力和疲劳常常困扰着我们。为了缓解这种状况,越来越多的人选择去按摩店进行放松。然而,繁忙的工作和家庭责任往往让我们无法抽出时间去按摩店。在这种情况下,上门按摩服务应运而生。而随着科技的发展&#…...
uniapp vue3版本引用 jsencrypt加密库报错:“default“ is not exported by……
个人产生这个异常的原因:将历史项目(vue2)的jsencrypt文件复制到新项目(vue3)里直接引用报错。存在兼容问题,需要重新安装vue3版本的jsencrypt 安装依赖 npm install jsencrypt页面引入 import { JSEncry…...
【WPF.NET开发】WPF中的双向功能
本文内容 FlowDirectionFlowDocumentSpan 元素非文本元素的 FlowDirection数字替换 与其他任何开发平台不同,WPF 具有许多支持双向内容快速开发的功能,例如,同一文档中混合了从左到右和从右到左的数据。 同时,WPF 也为需要双向功…...
Pytest 测试框架与Allure 测试报告——Allure2测试报告-L3
目录: allure2报告中添加附件-图片 Allure2报告中添加附件Allure2报告中添加附件(图片)应用场景Allure2报告中添加附件(图片)-Python代码示例:allure2报告中添加附件-日志 Allure2报告中添加附件ÿ…...
【机器学习300问】16、逻辑回归模型实现分类的原理?
在上一篇文章中,我初步介绍了什么是逻辑回归模型,从它能解决什么问题开始介绍,并讲到了它长什么样子的。如果有需要的小伙伴可以回顾一下,链接我放在下面啦: 【机器学习300问】15、什么是…...
OPC【4】:物理包
概述 OPC遵循zip标准,因此可以使用python标准库zipfile对docx格式的物理文件进行读写操作。在OPC中,物理包与抽象包是一对相对的概念,后续可以看到抽象包内的内容是将物理包内的信息进行编排形成地。简单点理解,物理包的作用在于…...
关于 Go 协同程序(Coroutines 协程)、Go 汇编及一些注意事项。
参考: Go 汇编函数 - Go 语言高级编程 Go 嵌套汇编 - 掘金 (juejin.cn) 前言: Golang 适用 Go-Runtime(Go 运行时,嵌入在被编译的PE可执行文件之中)来管理调度协同程式的运行。 Go 语言没有多线程(MT&a…...
深入剖析BaseMapperPlus扩展接口及其在MyBatis-Plus中的实践价值
前言 BaseMapperPlus并非MyBatis-Plus(MP)官方提供的标准接口,而是社区开发者基于MP的BaseMapper接口进行二次封装和增强后创建的一个自定义接口。这个概念可能因不同项目或个人实践而有所差异,但其核心思想是为了解决特定场景下…...
Linux之安装配置VCentOS7+换源
目录 一、安装 二、配置 三、安装工具XSHELL 3.1 使用XSHELL连接Linux 四、换源 前言 首先需要安装VMware虚拟机,在虚拟机里进行安装Linux 简介 Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GNU套件&#…...
[极客大挑战 2019]LoveSQL1
万能密码测试,发现注入点 注意这里#要使用url编码才能正常注入 测试列数,得三列 查看table,一个是geekuser另一个是l0ve1ysq1 查看column,有id,username,password,全部打印出来,…...
网络安全的介绍
1.什么是网络安全 网络安全是一门关注保护计算机系统、网络基础设施和数据免受未经授权访问、破坏或窃取的学科。随着数字化时代的发展,网络安全变得尤为重要,因为大量的个人信息、商业机密和政府数据都储存在电子设备和云端系统中。以下是网络安全的概…...
django邮件通知功能-
需求: 1:下单人员下订单时需要向组长和投流手发送邮件通知 2:为何使用邮件通知功能?因为没钱去开通短信通知功能 设计 1:给用户信息表添加2个字段 第一个字段为:是否开通邮件通知的布尔值 第二个字段为: 用…...
C++ 类定义
C 类定义 定义一个类需要使用关键字 class,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。 定义一个类,本质上是定义一个数据类型的蓝图,它定义了类的对象包括了什么࿰…...
IntelliJ IDE 插件开发 | (五)VFS 与编辑器
系列文章 IntelliJ IDE 插件开发 |(一)快速入门IntelliJ IDE 插件开发 |(二)UI 界面与数据持久化IntelliJ IDE 插件开发 |(三)消息通知与事件监听IntelliJ IDE 插件开发 |(四)来查收…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
