重生之我们在ES顶端相遇第7 章- 动态映射 - dynamic template(动态模板)
思维导图
前言
上一篇说的 dynamic mapping
, 当字段不存在时,会按照一定的规则去映射字段类型。 而 dynamic template
则允许你修改这一规则。
PS:开发中几乎不用。为了知识体系的完善,本文章只做简单介绍,更多详细内容可自行阅读 官方文档 。
基本使用
该功能有以下几个主要参数控制映射行为。
- • match_mapping_type:字段在 JSON 中的类型。
- • match、unmatch:匹配字段名
- • path_match、path_unmatch:匹配
object
字段名称。例如name.firstName
。
match_mapping_type
PUT test5
{
"mappings": {
"dynamic_templates": [
{
"strings_mapping": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
# 写入测试数据
POST test5/_doc
{
"name": "csp"
}
# 查询 Mapping
GET test5/_mapping
如果字段类型为 string
, 则将其映射为 keyword
。 其中 strings_mapping
为我们自定义的名称。
match、unmatch
# 删除
DELETE test5
PUT test5
{
"mappings": {
"dynamic_templates": [
{
"longs_as_strings": {
"match_mapping_type": "string",
"match": "long_*",
"unmatch": "*_text",
"mapping": {
"type": "long"
}
}
}
]
}
}
# 写入测试数据
PUT test5/_doc/1
{
"long_num": "5",
"long_text": "foo"
}
# 查询 mapping
GET test5/_mapping
上面的意思为:如果字段类型为 string
,名称是以 long_
开头,并且不以 _text
结尾的,都将字段类型映射为 long
。
path_match、path_unmatch
PUT test5
{
"mappings": {
"dynamic_templates": [
{
"full_name": {
"path_match": "name.long_*",
"path_unmatch": "name.*_text",
"mapping": {
"type": "long"
}
}
}
]
}
}
PUT test5/_doc/1
{
"name.long_num": "5",
"name.long_text": "foo"
}
该写法等同于以下写法
PUT test5/_doc/2
{
"name" : {
"long_num": "5",
"long_text": "foo"
}
}
GET test5/_mapping
上面的意思为:如果字段类型为 string
,名称是以 name.long_
开头,并且不匹配name.*_text
的,都将字段类型映射为 long
。 与 match、unmatch
区别为:它用于 object
字段名称匹配。
原文地址:https://blog.csdn.net/qq_32880923/article/details/140588225
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!