百度做网站价格/长沙专业seo优化公司
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 插件开发 |(四)来查收…...

金融OCR领域实习日志(一)
一、OCR基础 任务要求: 工作原理 OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相)检查纸上打印的字符,经过检测暗、亮的模式肯定其形状,而后用…...

CC++编译和链接介绍
介绍 C语言的编译和链接是将源代码转换为可执行文件的两个关键步骤。以下是详细的流程: 编译过程(Compilation) 预处理(Preprocessing): 编译器首先对源代码进行预处理,这个阶段处理#include包…...

Element-UI中的el-upload插件上传文件action和headers参数
官网给的例子action都是绝对地址,我现在需要上传到自己后台的地址,只有一个路由地址/task/upload 根据 config/index.js配置,那么action要写成/api/task/upload,另外也可以传入函数来返回地址:action"uploadUrl()"。 …...

在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
目录 博客前言 一.创建springboot项目 新建项目 选择创建类型编辑 测试 二.集成达梦数据库 添加达梦数据库部分依赖 添加数据库驱动包 配置数据库连接信息 编写测试代码 验证连接是否成功 博客前言 随着数字化时代的到来,数据库在应用程序中的地位越来…...

docker相关
下载Ubuntu18.04文件64位(32位安装不了MySQL) https://old-releases.ubuntu.com/releases/18.04.4/?_ga2.44113060.1243545826.1617173008-2055924693.1608557140 Linux ubuntu16.04打开控制台:到桌面,可以按快捷键ctrlaltt 查…...

生产力工具|卸载并重装Anaconda3
一、Anaconda3卸载 (一)官方方案一(Uninstall-Anaconda3-不能删除配置文件) 官方推荐的方案是两种,一种是直接在Anaconda的安装路径下,双击: (可以在搜索栏或者使用everything里面搜…...

大模型学习与实践笔记(十二)
使用RAG方式,构建opencv专业资料构建专业知识库,并搭建专业问答助手,并将模型部署到openxlab 平台 代码仓库:https://github.com/AllYoung/LLM4opencv 1:创建代码仓库 在 GitHub 中创建存放应用代码的仓库ÿ…...

Vulnhub靶机:FunBox 5
一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:FunBox 5(10.0.2.30) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/funb…...

性能优化(CPU优化技术)-NEON指令介绍
「发表于知乎专栏《移动端算法优化》」 本文主要介绍了 NEON 指令相关的知识,首先通过讲解 arm 指令集的分类,NEON寄存器的类型,树立基本概念。然后进一步梳理了 NEON 汇编以及 intrinsics 指令的格式。最后结合指令的分类,使用例…...

【极数系列】Flink环境搭建(02)
【极数系列】Flink环境搭建(02) 引言 1.linux 直接在linux上使用jdk11flink1.18.0版本部署 2.docker 使用容器部署比较方便,一键启动停止,方便参数调整 3.windows 搭建Flink 1.18.0版本需要使用Cygwin或wsl工具模拟unix环境…...