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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值