Elasticsearch 映射Mappings (三)

news/2024/11/29 9:59:12/

文章目录

  • 前言
  • 一、Mapping简介
    • 查看索引映射
  • 二、自动映射 dynamic mapping
    • 自动类型推断
    • mapping注意点
  • 三、手动映射 Expllicit mapping
    • 创建索引
  • 四、自动映射模板 Dynamic Templates
    • 定义映射模板
    • 规则判定:conditlons
      • match_mapping_type
      • match、unmatch
      • path_match、path_unmatch
      • 分词器变量
  • 总结


前言

本文主要记录映射Mappings的作用、类型、ES常用数据类型、常见参数、重要的数据类型、映射配置、映射模板。

静态参数使不可修改的,所以mappings里的配置需要谨慎行事


一、Mapping简介

mapping类似Mysql中的表结构,在Maping里包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一份字段可以有多个类型。

查看索引映射

所有(默认创建keyword映射)

GET <索引名>/_mapping
{"text_create": {"mappings": {"properties": {"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

查看指定

GET <索引名>/_mapping/field/<字段名称>
{"text_create": {"mappings": {"name": {"full_name": "name","mapping": {"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}}
}

二、自动映射 dynamic mapping

在索引文档写入时发生自动创建mapping的机制。在写入文档时会自动为该文档创建mapping映射字段。在创建索引时不要求创建mapping映射,ES会根据字段值来推断字段类型,进而创建并指定索引类型。

自动类型推断

自动类型推断的规则为:

field typedynamicruntime
true/falsebooleanboolean
小数floatdouble
数字longlong
objectobject-
数组取决于数组中的第一个非空元素类型取决于数组中的第一个非空元素类型
日期格式字符串datedate
数字类型字符串float/longdouble/long
其它字符串text + keywordkeyword

自动映射器会尽可能的把字段映射为宽字段类型

PUT text_create/_doc/1
{"price": 18.12,"display": true,"object":{"1":1,"2":2},"arey" :["3","4"],"time": "2011-11-12"
}

mapping对应映射

{"text_create": {"mappings": {"properties": {"age": {"type": "long"},"arey": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"display": {"type": "boolean"},"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"object": {"properties": {"1": {"type": "long"},"2": {"type": "long"}}},"price": {"type": "float"},"time": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

mapping注意点

  • ES 没有隐式转换
  • ES 不支持类型修改
  • 生产环境尽可能避免使用 dynamic mapping

三、手动映射 Expllicit mapping

也称为显示映射,在索引文档写入前。创建索引并且指定索引中每个字段类型、分词器等参数。

mapping索引创建完成后,部分mapping的属性时不允许更改的

创建索引

PUT text_mapping
{"mappings": {"properties": {"text_field" : {"type": "text","fields": {"text_filed_keyword":{"type": "keyword"}}},"long_field": {"type": "long"}}}
}

四、自动映射模板 Dynamic Templates

在定义字段映射的时候,往往字段不一定有具体的名称,有时候希望对一类相同或者相似特征的字段定义相同的映射,此时可以使用Dynamic Templates。

定义映射模板

"dynamic_templates": [{"my_template_name": {... match conditions ..."mapping":{...}}},...
]

规则判定:conditlons

match_mapping_type

用于匹配数据类型

例子

PUT templates_text
{"mappings": {"dynamic_templates": [{"integers":{"match_mapping_type": "long","mapping": {"type": "integer"}}},{"integers":{"match_mapping_type":"string","mapping": {"type": "keyword"}}}]}
}

插入数据,对应的字段将会自动带上对应的类型。

PUT templates_text/_doc/1
{"my_integer": 500,"my_string": "smz"
}
      "properties": {"my_integer": {"type": "integer"},"my_string": {"type": "keyword"}}

match、unmatch

用以匹配字段名称规则,支持通配符、正则表达式。

正则:

 "match_pattern": "regex","match": "^profit_\d+$"

示例:

PUT templates_text2
{"mappings": {"dynamic_templates": [{"longs_as_strings":{"match_mapping_type": "string","match": "num_*", #以num_*开头"unmatch": "*_text",#不以_text结尾"mapping": {"type": "long"}}}]}
}

path_match、path_unmatch

用于嵌套字段

用例:

PUT templates_text3
{"mappings": {"dynamic_templates": [{"full_name":{"path_match": "name.*", #路径"path_unmatch": "*.middle",#路径不匹配"mapping": {"type": "text","copy_to": "full_name"#符合的字段拷贝到此}}}]}
}

分词器变量

PUT templates_text4
{"mappings": {"dynamic_templates": [{"named_analyzers":{"match_mapping_type": "string","match": "*", "mapping": {"type": "text","analyzer": "{name}" #分词器名称}}},{"no_doc_values":{"match_mapping_type": "*","mapping": {"type": "{dynamic_type}","doc_values": "false"}}}]}
}

以上示例,定义的两个模板,有以下规则:

  • 所有字符串类型的字段,其分词器都会定义为和字段名称一致的分词器
  • 所有非文本类型的字段,都会关闭doc_values

总结

本文主要记录了ES映射以及映射配置、映射模板。


http://www.ppmy.cn/news/979134.html

相关文章

华为战略方法论:BLM模型之关键任务与依赖关系

内容简介 在 BLM 模型中&#xff0c;执行部分包括四个模块&#xff0c;分别是&#xff1a; 关键任务与依赖关系&#xff1b;组织与绩效&#xff1b;人才&#xff1b;氛围与文化。 详细内容&#xff0c;大家可以参看下面这张图。 这四个模块其实是可以进一步划分成两个关键点…

fpga--流水灯

fpga流水灯的设计 思路&#xff1a;外部时钟频率50mhz&#xff0c;若要实现每隔0.5s闪烁一次&#xff0c;则使用内部计数器计数到24999999拉高一个周期电平&#xff0c;当电平被拉高的时候&#xff0c;进行LED灯电平的设置&#xff0c;每次检测到高电平&#xff0c;就进行一位…

顺序表操作详解

文章目录 一、线性表二、顺序表1、概念2、接口实现1>初始化顺序表2>操作结束后释放空间3>打印顺序表4>尾插5>头插6>头删7>尾删8>顺序表查找9>顺序表在pos位置插入x10>顺序表删除pos位置的值 一、线性表 线性表&#xff08;linear list&#xff0…

如何在Java中操作Redis(使用Jedis和Spring Data Redis来操作Redis)

在Java中操作Redis 在Java中&#xff0c;我们可以使用Jedis和Spring Data Redis来操作Redis。 一、使用Jedis操作Redis Jedis是一个流行的Java Redis客户端&#xff0c;提供了丰富的API来操作Redis。下面是使用Jedis操作Redis的步骤&#xff1a; 添加依赖 <dependency>…

PHP 基础知识全解析

PHP&#xff0c;全称 "Hypertext Preprocessor"&#xff0c;是一种流行的通用开源脚本语言&#xff0c;特别适合于 web 开发。下面是一篇深入介绍 PHP 基础知识的文章。 一、PHP 简介 PHP 是服务器端的脚本语言&#xff0c;它可以嵌入到 HTML 中去&#xff0c;用于创…

2、nacos 2.1.0注册中心原理及源码分析

一、为什么有这课程 Spring Cloud Alibaba 新版本中Seata 1.5.2和Nacos 2.1.0 在性能和使用方面都有很大提升&#xff0c;这节课将从使用和源码的角度详细讲解这两个框架。 二、设计注册中心 1、分布式框架的注意点&#xff1a;三高架构 高可用 高可用性&#xff08;High Av…

linux 查看网卡,网络情况

1&#xff0c;使用nload命令查看 #yum -y install nload 2&#xff0c; 查看eth0网卡网络情况 #nload eth0 Incoming也就是进入网卡的流量&#xff0c;Outgoing&#xff0c;也就是从这块网卡出去的流量&#xff0c;每一部分都有下面几个。 – Curr&#xff1a;当前流量 – Avg…

STM32MP157驱动开发——按键驱动(POLL 机制)

文章目录 “POLL ”机制&#xff1a;APP执行过程驱动使用的函数应用使用的函数pollfd结构体poll函数事件类型实现原理 poll方式的按键驱动程序(stm32mp157)gpio_key_drv.cbutton_test.cMakefile修改设备树文件编译测试 “POLL ”机制&#xff1a; 使用休眠-唤醒的方式等待某个…