做宣传网站,在线a视频网站一级a做爰,中交路桥建设有限公司中标,简约风格网站文章目录 前言一、Mapping简介查看索引映射 二、自动映射 dynamic mapping自动类型推断mapping注意点 三、手动映射 Expllicit mapping创建索引 四、自动映射模板 Dynamic Templates定义映射模板规则判定#xff1a;conditlonsmatch_mapping_typematch、unmatchpath_match、pa… 文章目录 前言一、Mapping简介查看索引映射 二、自动映射 dynamic mapping自动类型推断mapping注意点 三、手动映射 Expllicit mapping创建索引 四、自动映射模板 Dynamic Templates定义映射模板规则判定conditlonsmatch_mapping_typematch、unmatchpath_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 typedynamicruntimetrue/falsebooleanboolean小数floatdouble数字longlongobjectobject-数组取决于数组中的第一个非空元素类型取决于数组中的第一个非空元素类型日期格式字符串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映射以及映射配置、映射模板。