Elasticsearch学习6:Dynamic Mapping和常见字段类型

2024-05-01 16:08

本文主要是介绍Elasticsearch学习6:Dynamic Mapping和常见字段类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

知识点 1:Dynamic Mapping和常见字段类型

什么是 Mapping

一、Mapping 类似数据库中的 schema 的定义
• 定义索引中字段的名称
• 定义字段数据类型,如字符串、数字、布尔....
• 字段,倒排索引的相关配置,(Analyzed or Not Analyzed,Analyzer)

二、Mapping 会将 JSON 文档映射成 Lucene 所需要的扁平格式

三、一个 Mapping 属于一个索引的 Type

常见字段数据类型

在 Elasticsearch 常见字段类型,往往有以下几种;
一、简单类型,包括
• Text / Keyword
• Date
• Integer / Floating
• Boolean
• IPv4 & IPv6
二、复杂类型——对象和嵌套对象
• 对象类型 / 嵌套类型
三、特殊类型
• geo_point & geo_shape / percolator

什么是 Dynamic Mapping(自动映射)

• 在写入新的文档时,如果索引不存在,会自动创建索引。
• Dynamic Mapping 的机制,使得我们无需手动定义 Mappings。Elasticsearch 会自动根据文档信息,推算出字段的类型。偶尔会出现推送不正确的情况,如地理位置信息。
• 但类型设置不正确时,会导致一些功能无法正常运行,如 Range 查询。

GET index/_mappings

image.png

类型自动识别

image.png

知识点 2 :显式Mapping设置与常见参数介绍

先使用系统自动映射创建,后复制出来修改

自定义 Mapping 优势

1、通过Index--控制当前字段是否被索引,默认为 true ,设置为 “false”,该字段不可被搜索,且节约存储开销

image.png

2、倒排索引(Index Options)创建,有四种不同级别配置,除了“Text”类型默认记录“postions”,其他默认为 “docs”,记录内容越多,占用存储越多

image.png

3、当你需要对“null—value”实现搜索,只需在 Mapping 文件中,对“null-value”指定为你需要的值——空值null

image.png

4、由于“_ all”在7.0版本中已被取消,要实现这个功能我们可以用“copy_to”来实现


数组类型

Elasticsearch 中不提供专门的数组类型,但任何字段,都可以包含多个相同类型的数值。

image.png

知识点 3 :多字段特性及Mapping中配置自定义Analyzer

多字段特性

1、当我们为索引设置 Mapping 文件时,我们可以为字段增加一个子字段,如在默认情况下,“Text”ES都会有一个默认的“keyword”字段,

2、使用不同的 analyzer ,实现不同语言进行分词,如英文;以 “pinyin”方式搜索,还支持为搜索和索引指定不同的 analyzer。

image.png

精确值和全文本比较

精确值:包括数字/日期/具体一个字符串(如“Apple Stroe”)——不分词
在ES 中,该类指以“keyword”来表示,不做分词处理。

image.png

全文本:非结构化的文本数据。——分词
在ES 中,该类指定为“Text”需要进行分词处理。

image.png

知识点 4 :自定义分词

自定义分词

当 Elasticsearch 自带分词无法满足时,可以自定义分词器,通过自祝贺不同的组件实现。

Character Filter

① 在Tokenizer 之前对文本进行处理,例如增加删除及替换字符。可以配置多个 Character Filters。会影响 Tokenizer 的 position 和offset 信息。
② 一些自带的 Character Filters

HTML strip— 去除HTML标签

Mapping — 字符串替换
Pattern replace — 正则匹配替换

Tokenizer
① 将原始文本按照一定规则,切分为 term or token
② Elasticsearch 内置的 Tokenizers

whitespace/standard/uax_url_email/pattern/keyword/path hierarchy

③ 可以用 Java 开发插件,实现自己的 Tokenizer

Token Filter
① 将 Tokenizer 输出的单词(term),进行增加、修改、删除
② Elasticsearch 自带的 Token Filters

Lowercase/stop/synonym(添加近义词)

设置一个 Custom Analyzer

当 Elasticsearch 以上的分词无法满足需求,在创建索引时,可以自定义自己的 Custom Analyzer

image.png

 

知识点 5 :Index Template 和 Dynamic Template

在业务进行中,集群上会有越来越多的索引,如果你是做日志管理,你会为你的日志每天创建一个索引,因为这样可以更好的管理你的数据,并提高性能。

Index Template

按照一定规则,自动匹配到新创建的索引上,设定 Mapping 和 Setting

① 模板会在一个新创建索引时产生作用,修改模板不会影响已创建的模板
② 设定多个索引模板,这些设置会被“merge”在一起
③ 可以指定“order”设置,控制“merging”的过程

image.png

Index Template 工作方式

当一个索引被创建时
① 应用 Elasticsearch 默认的 settings 和 mappings
② 应用 order 数值低的 Index Template 中的设定
③ 应用 order 高的 Index Template 中的设定,之前的设定会被覆盖
④ 应用创建索引是,用户所指定的 Settings 和Mappings,并覆盖之前模板中的设定。

什么是 Dynamic Template

应用在具体的索引上,根据 Elasticsearch 识别的数据类型,结合字段名称,来动态设定字段类型

①可以实现所有字符串类型设定为“keyword”或者关闭“keyword”字段
②“is”开通的字段设置成“boolean”
③“long_”开头的都设置成“long”类型

image.png

1、设定在某个索引的 Mapping 中

2、设定一个 Template 名称
3、设定匹配规格数组
4、设定匹配到字段 设置 Mapping

匹配规则参数

① match_mapping_type:匹配自动识别的字段类型,如string,boolean等
② match,unmatch:匹配字段名
③ path_match,path_unmatch

image.png

这篇关于Elasticsearch学习6:Dynamic Mapping和常见字段类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952104

相关文章

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2