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

相关文章

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Python如何查看数据的类型

《Python如何查看数据的类型》:本文主要介绍Python如何查看数据的类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python查看数据的类型1. 使用 type()2. 使用 isinstance()3. 检查对象的 __class__ 属性4.

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题

《SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题》dynamic-datasource-spring-boot-starter是一... 目录概要整体架构构想操作步骤创建数据源切换数据源后续问题小结概要自己闲暇时间想实现一个多租户平台,

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word