天天看点

ES Mapping,2 Meta元数据Meta元数据

Meta元数据

  • 身份元数据
  • 索引元数据
  • 文档元数据
  • 路由元数据
  • 其他
PUT /idx_pro/
{
  "settings": {
    "index": {
        "number_of_shards" : "2",
        "number_of_replicas" : "0"
    }
  },
  "mappings": {
    "properties": {
      "proId" : {
        "type": "keyword",
        "ignore_above": 64
      },
      "name" : {
        "type": "text",
        "analyzer": "ik_max_word", 
        "search_analyzer": "ik_smart", 
        "fields": {
          "keyword" : {"ignore_above" : 256, "type" : "keyword"}
        }
      },
      "mytimestamp" : {
        "type": "date",
        "format": "epoch_millis"
      },
      "createTime" : {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      }
    }
  }
}
           
Meta 说明
_all 自动组合所有的字段值,以空格分割,可以指定分器词索引,但是整个值不被存储,所以此字段仅仅能被搜索,不能获取到具体的值
_field_names 索引了每个字段的名字,可以包含null值,可以通过exists查询或missing查询方法来校验特定的字段
_id 文档的唯一标识
_index 文档所属索引 , 自动被索引,可被查询,聚合,排序使用,或者脚本里访问
_meta
_parent
_routing
_source 一个doc的原生的json数据,不会被索引,用于获取提取字段值 ,启动此字段,索引体积会变大,如果既想使用此字段
_type 文档所属类型,自动被索引,可被查询,聚合,排序使用,或者脚本里访问
_uid 由_type和_id字段组成,自动被索引 ,可被查询,聚合,排序使用,或者脚本里访问
_timestamp 可以手工指定时间戳值,也可以自动生成使用now()函数,除此之外还可以设置日期的格式化,忽略确实等功能
_ttl 对于一些会话数据或者验证码失效时间,一般来说是有生命周期的,在es中可以很方便的通过这个ttl来设置存活时间,比如1小时,或者10分钟,在超时过后,这个doc会被自动删除,这种方式并不适合按周或按天删除历史数据,如果是这种需求,可考虑使用索引级别的管理方式
_size 整个_source字段的字节数大小

身份元数据

_index

文档所属索引 , 自动被索引,可被查询,聚合,排序使用,或者脚本里访问

_type

文档所属类型,自动被索引,可被查询,聚合,排序使用,或者脚本里访问

_id

文档的唯一标识

索引元数据

_all

动组合所有的字段值,以空格分割,可以指定分器词索引,

但是整个值不被存储,所以此字段仅仅能被搜索,不能获取到具体的值

_field_names

索引了每个字段的名字,可以包含null值,可以通过exists查询或missing查询方法来校验特定的字段

_timestamp

可以手工指定时间戳值,也可以自动生成使用now()函数,除此之外还可以设置日期的格式化,忽略确实等功能

_ttl

对于一些会话数据或者验证码失效时间,一般来说是有生命周期的,在es中可以很方便的通过这个ttl来设置存活时间,比如1小时,或者10分钟,在超时过后,这个doc会被自动删除,这种方式并不适合按周或按天删除历史数据,如果是这种需求,可考虑使用索引级别的管理方式

文档元数据

_source

一个doc的原生的json数据,不会被索引,用于获取提取字段值 ,启动此字段,索引体积会变大,如果既想使用此字段

又想兼顾索引体积,可以开启索引压缩

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/index-modules.html#index-codec
           

_size

整个_source字段的字节数大小,需要单独安装一个插件才能展示,详情参见:https://www.elastic.co/guide/en/elasticsearch/plugins/5.4/mapper-size.html

_source是可以被禁用的,不过禁用之后部分功能再支持:

update api:

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/docs-update.html 
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-request-highlighting.html 
           

索引重建、修改mapping以及分词、索引升级

debug查询或者聚合语句

索引自动修复

路由元数据

_parent

在同一个索引中,可以通过_parent字段来给两个不同mapping type的数据建立父子关系,在查询时可以通过has_child, has_parent等查询,来聚合join数据,需要注意的是,父子type必须不能是一样的,否则会识别失败。

_routing

一个doc可以被路由到指定的shard上,通过下面的规则

shard_num = hash(_routing) % num_primary_shards
           

默认情况下,会使用 doc 的 _id 字段来参与路由规则,如果此doc有父子关系,则会以父亲的_id作为路由规则,以确保父子数据 必须处于同一个shard上,以提高join效率

_ignored

elasticsearch 6.4之后添加元字段

_ignored 元字段索引和存储文档中由于ignore_malformed属性被ignored 的每个字段的名称。

其他

_meta

每个mapping type可以有不同的元数据类型,我们可以存储自己定义认为的元数据中,此字段支持查询和更新

参考

  • https://www.elastic.co/guide/en/elasticsearch/reference/2.3/mapping-fields.html
  • http://m635674608.iteye.com/blog/2259528
  • http://www.111cn.net/jsp/J2EE-EJB/118565.htm

继续阅读