mapping使用
mapping 是用来定义一个文档以及他的字段是如何存储和索引的过程
- 动态映射 Dynamic mapping
- 使用前不需定义字段、mapping类型
- 只用索引一个文档,可自动添加新字段名
- 可将新字段加到顶级mapping type、内部对象、嵌套字段
- 可配置动态映射规则,以自定义用于新字段的映射
- 显示映射 Explicit mapping
- 创建索引时,同时创建映射类型和字段映射
- 可通过PUT mappint API 向已存在的索引 添加映射类型和字段
- 已存在的index中显示添加mapping
-添加索引: [root@ZYT-Test1 ~]# curl -XPUT http://10.173.28.225:9200/index02
-
- 创建index指定mapping
-
ps:一个索引的所有文档只能有一个类型 -
查看mapping
-
[root@ZYT-Test1 ~]# curl -XGET http://localhost:9200/index03/mappings
- Settings to prevent mappings explosion
- 索引定义过多字段会导致mappings explosion
- 会导致内存不足错误
- 可设置允许限制人为或动态创建字段mapping的数量
-
- index.mapping.total_fields.limit : 索引中最大字段数,默认1000,字段和对象mapping、字段别名都对接该限制
-
- index.mapping.depth.limit:字段最大深度,以内部对象数量来度量,默认20, 【若所有字段在root对象级定义,则深度为1,若有一个对象mapping,则深度为2】
-
- index.mapping.nested_fields.limit:索引中嵌套字段的最大数,默认50.【索引一个包含100个嵌套字段的文档实际上索引101个字段,因此每个嵌套文档都被索引为单独的隐藏文档】
- Updating existing field mapping
- 已存在的字段映射无法更新
- 更改映射使已索引的文档无效
- 应使用正确映射创建一个新索引,将数据reindex到该索引
- 若只想重命名字段,不改映射,则可引入一个alias字段
- mapping type 为何会被移除
- 一个index中type不是相互独立,可能会互相影响
- 一个index中,不同type具有相同名称的field,并且field的数据类型必须相同。不同type的相同名称的filed存储在相同地方
- 一个index中存储具有很少或没有共同字段的不同实体,会导致稀疏数据并干扰lucene的压缩效率
- index per document type
- 数据可以更密集,能够高效压缩
- 全文搜索评分的term统计数据更准确,同意索引中所有文档都代表单个个体
- 索引大小可根据文档数调整,小数据量的index使用较少的主分片
- 定制type字段
- 由于集群存储主分片有限,可实现自定义的类型字段
字段数据类型
ps:数据类型分类:Core、Complex、Geo、Specialised四大类
- 核心数据类型
- String类型:text、keyword
- 数值类型:long,integer,short,byte,double,float,half_float,scaled_float
- 日期类型:date
- 布尔类型:boolean
- 二进制类型:binary
- range类型:integer_range,float_range,long_range,double_range,date_range
- 复杂数据类型
- 数组类型:没有专有的类型
- 对象类型:object,单个json对象
- 嵌套类型:nested,嵌套的json对象
- Geo数据类型
- Geo-point:geo_point,用于经纬度
- geo_shape:用于复杂形状,如多边形
- 专业数据类型
- IP类型:ip,用于IPv4 IPv6地址
- Completion:completion,用于提供自动完成的建议
- Token count:token_count,用于计算字符中的token
- mapper-murmur3:murmur3,在索引时计算值的hash并存储到index
- mapper-annotated-text:annotated-text,用于索引包含特殊标记的文本,一般标识命名实体
- Percolator:percolator接受来自query-dsl的查询
- join:为同一索引中的文档定义父子关系
- Alias:为现有字段定义一个别名
Mapping元数据
- 身份标识类元数据:_index,_uid,_type,_id
- 文档source元数据:_source,_size
- 路由元数据:_routing
- 其他元数据:_meta
- 索引时元数据字段:_all、_field_names、_ignored
动态mapping
- 自动检测和添加新字段称为动态映射
- 动态字段映射:管理动态字段检测的规则
- 动态模板:自定义规则,用于动态添加字段的mapping