ES学习摘要 - 13. Mapping

Mapping定义了一个索引的doc中包含哪些fields,这些fields如何被存储/索引。

Field数据类型包括:

简单类型:text, keyword, date, long, double, boolean, ip

嵌套类型:object, nested

特殊类型:geo_point, geo_shape, completion

可以通过multi-fields特性为同一个field提供不同类型的存储

由于dynamic mappings特性,一个索引的mapping会变得越来越大。为了防止mapping爆炸,可以设置限制参数:

index.mapping.total_fields.limit index可以包含的最多fields数。默认1000

index.mapping.depth.limit field的最大深度。默认20

index.mapping.nested_fields.limit nested fields的最大数目。默认50

索引的mappings在创建后不允许修改,需要通过reindex来修改一个mappings。

13.1 Field Datatypes

Text

会被analyzer分词解析

Keyword

不被分词处理,用于filter/sort/aggregation场景

Numeric

long/integer/short/byte/double/float/halt_float/scaled_float

Date

JSON没有一种日期类型,因此ES中的日期格式可能为:

代表时间的字符串,如“2016-01-01”, "2016/01/01 00:00:00"

long值,代表milliseconds-since-the-epoch

int值,代表seconds-since-the-epoch

内部存储时会被转为UTC时间,并存储成long值代表milliseconds-since-the-epoch

Boolean

false/"false"/true/"true"

Binary

Base64编码形式存储的值

Range

integer_range/float_range/long_range/double_range/date_range/ip_range

Array

ES中没有专门的array类型,所有field默认都可以包含0个或多个值

string array: ["one", "two"]

int array: [1, 2]

数组中的元素必须有相同的类型

Object

可以定义嵌套的field结构:

PUT my_index { "mappings": { "_doc": { "properties": { "region": { "type": "keyword" }, "manager": { "properties": { "age": { "type": "integer" }, "name": { "properties": { "first": { "type": "text" }, "last": { "type": "text" } } } } } } } } }

Nested

需要独立检索数组内的元素时,使用nested替代object

13.2 Meta-Fields

每个doc上都会包含一些元信息,可以分为以下几类:

Identity meta-fields

_index doc所属的索引

_uid _type和_id的组合

_type 文档的mapping type

_id 文档id

Document source meta-fields

_source 文档原文

_size _source大小,单位bytes

Indexing meta-fields

_all 包含了所有fields,默认关闭

_field_names 非空fields的名字集合

Routing meta-field

_routing 自定义分片路由字段

13.3 Mapping parameters

在定义mapping时,可以添加以下参数

fields

将一个field以不同方式存储

{ "mappings": { "_doc": { "properties": { "city": { "type": "text", // city是text "fields": { "raw": { "type": "keyword" // city.raw是keyword } } } } } } }

properties

用于为object/nested类型定义内嵌数据类型

doc_values

es会以列存的方式保存fields,用于sort/aggregation/script访问等场景。默认除了text类型的所有fields都已经开启了doc_values,可以将它设置为false关闭。

copy_to

自定义类似_all的field,将fields拷贝到一个特殊field中,对该field检索就可以实现跨多个field的效果。

analyzer/search_analyzer

为text类型设置分词器。

normalizer

预处理keyword类型的field值及查询值

store

默认情况下,field会被索引但不会被单独存储。所有fields的内容会集中保存在_source总,可以通过source filtering返回部分source信息。

但有些情况下,我们可能需要单独存储某些fields。这时就可以将这些field的store设置为true,在查询中通过stored_fields来获取。

index

是否索引一个field,默认为true。

enabled

作用于object类型的fields,让es不解析相关field的内容。

null_value

将null替代为指定值。

format

es为date类型的数据内置了大量的formats,也可以通过format字段为date field指定特殊的格式。

ignore_above

忽略长度超过ingore_above的string。

ignore_malformed

一个doc的field如果不满足定义,默认情况下会抛出异常,从而会忽略整个doc。可以将ignore_malformed为true,可以忽略不正确的fields,保留正常的doc。

dynamic

默认情况下,可以动态添加fields到mapping中。可以将dynamic设置为false,禁止dynamic mapping。

转载于:https://my.oschina.net/zhuhui/blog/3079965

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值