Elasticsearch Mapping类型映射概述与元字段详解

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: Elasticsearch Mapping类型映射概述与元字段详解

本节开始将对ES类型映射机制进行详细解读。

image.png

Mapping,映射,相当于关系型数据库创建语句,定义文档字段及其类型、索引与存储方式。通常会涉及如下方面:


  • 文档中哪些字段需要定义成全文索引字段。
  • 文档中哪些字段定义为精确值,例如日期,数字、地理位置等。
  • 文档中哪些字段需要被索引(能通过该字段的值查询文档)。
  • 日期值的格式。
  • 动态添加字段的规则定义等。


映射类型


Elasticsearch支持meta-fields、fields or properties两种映射类型,将决定文档的索引方式。


  • Meta-fields
    元数据字段用于定义文档的元数据字段的特征,文档的元数据字段主要包括_index、_type、_id、_sour
    ce这4个字段。
  • Fields or properties
    属性字段列表,通过properties字段定义整个文档有效载荷的各字段的数据类型、分词器等属性。


映射类型,可以理解为以何种方式来定义索引中一个类型的字段集。


数据类型


每一个字段都会指定一个数据类型,数据类型通常如下:


  • 简单类型,例如text、keyword、d
    ate、long、double、boolean、ip。

  • 复合类型,诸如object(json)、nets
    ed.

  • 特殊类型,诸如geo_point、geo_s
    hape(地图相关类型)、completion。


后续章节会单独重点剖析elasticsearch所支持的数据类型。


映射保护机制


es提供如下参数来限制es的行为:


  • index.mapping.total_fields.limit
    索引中允许定义的最大字段(属性)个数,默认为1000。
  • index.mapping.depth.limit
    字段级联的最大深度,默认为20。
  • index.mapping.nested_fields.limit
    一个索引最多包含字段类型为nest
    ed的个数,默认为50。


动态映射机制


与关系型数据库不同的是,一个type(对应关系型数据库的表)中的字段可以在使用过程中动态添加。具体的动态映射机制,将在后续文章中单独结束。


更新已有映射定义


Elasticsearch不支持直接修改已索引的已存在的字段映射,因为修改字段映射,意味着已索引的数据生效,可以使用别名机制来修改字段的名称,如果需要修改已存在字段的映射,建议重新创建一个索引,再使用reindex API迁移数据。


索引、type组织方式


索引在创建时,Elasticsearch6.x版本只支持一个映射类型,而7.x版本后将完成删除映射类型。5.x中一个索引包含多个type的情况再6.x版本将继续支持查询。7.0版本后,API将完成移除与多类型相关的API。


Elasticsearch6.x版本后为什么不继续对单一索引库提供多类型支持呢?


当初,为了方便理解es,通常与关系型数据库进行类比,例如es中的index相当于关系型数据库的database,而类型相当于关系型数据库中的table。其实这是一个错误的比喻。在关系型数据库中,表是相互独立的,一个表中的列名与另外一个表中的列名相同是没有关系的,但对于es的类型映射定义,情况并非如此。


在es单一索引中,不同映射类型(type)具有相同名称的字段在内部都是由同一个Lucence字段来存储,这也就意味着同一个索引内不同的类型,如果出现名字相同的字段,其数据类型也必须相同。更重要的是,存储在同一索引中具有很少或没有共同字段的不同类型(实体)会导致数据稀疏,大大降低Lucece高效压缩文档的能力,影响其检索性能。


基于上述各种原因,故es将在后续版本中不支持一个索引中定义多个类型。

image.png

每个文档都有与之关联的元数据,例如_index、mapping _type和_id元字段。

在创建映射类型时,可以定制其中一些元字段的行为。


identity meta-fields


表明文档身份的元字段。


  • _index
    文档所在的索引,类似于关系型数据库的database。
  • _uid
    _type与_id的组合,文档的唯一标识。
  • _type
    文档映射类型。
  • _id
    文档的_id值。


document source meta-fields


  • _source
    文档的原始json数据。
  • _size
    文档_souce字段的字节长度,需要插件:mapper-size plugin。


indexing meta-fields


  • _all
    将所有字段映射成一个_all字段,在6.0.0版本后废弃,可以使用copy_to来定义需要聚合的字段。
  • _field_names
    _field_names字段,用于索引文档中包含除null之外的任何值的每个字段的名称。exist查询使用这个字段来查找对于特定字段具有或不具有任何非空值的文档,也就是该字段记录的是字段值不为null的所有字段名称。当前版本,_field_names字段不包含启用了doc_values、norm的字段,对于启用doc_values或norm的字段,exist查询仍然可用,但不会使用_field_names字段。

    注:禁用_field_names通常是不必要的,因为它不再承载以前的索引开销。如果你有很多禁用doc_value和norm的字段,并且你不需要使用这些字段执行exist查询,你可能想禁用_field_names,你可以通过如下方式禁用_field_names字段:
1PUT tweets
 2{
 3  "mappings": {
 4    "_doc": {
 5      "_field_names": {
 6        "enabled": false
 7      }
 8    }
 9  }
10}                                                        }
  • _ignored
    设置为ignore_malformed=true的所有字段。


routing meta-field


  • _routing
    分片路由字段。


other meta-field


  • _meta
    用于用户自定义的元数据,例如:
 1PUT my_index
 2{
 3  "mappings": {
 4    "_doc": {
 5      "_meta": { 
 6        "class": "MyApp::User",
 7        "version": {
 8          "min": "1.0",
 9          "max": "1.3"
10        }
11      }
12    }
13  }
14}                                                        }


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
存储 自然语言处理 数据库
使用Elasticsearch映射定义索引结构
使用Elasticsearch映射定义索引结构
|
4月前
|
自然语言处理 关系型数据库 数据库
ElasticSearch 映射类型及数据类型区分
ElasticSearch 映射类型及数据类型区分
52 0
|
6月前
|
Oracle 关系型数据库 API
实时计算 Flink版产品使用合集之当sink到elasticsearch时,可以指定es的指定字段吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用合集之当sink到elasticsearch时,可以指定es的指定字段吗
|
5月前
|
SQL 安全 数据挖掘
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
Elasticsearch聚合查询用于复杂数据分析,包括统计空值率。示例展示了如何计算字段`my_field`非空非零文档的百分比。查询分为三步:总文档数计数、符合条件文档数计数及计算百分比。聚合概念涵盖度量、桶和管道聚合。脚本在聚合中用于动态计算。常见聚合类型如`sum`、`avg`、`date_histogram`等。组合使用可实现多值统计、嵌套聚合和空值率计算。[阅读更多](https://zhangfeidezhu.com/?p=515)
295 0
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
|
5月前
|
存储 自然语言处理 关系型数据库
Elasticsearch如何修改Mapping结构并实现业务零停机
Elasticsearch如何修改Mapping结构并实现业务零停机
|
5月前
|
存储 索引
Elasticsearch中父子文档的关联:利用Join类型赋予文档的层级关系
Elasticsearch中父子文档的关联:利用Join类型赋予文档的层级关系
|
5月前
|
存储 索引
Elasticsearch索引之嵌套类型:深度剖析与实战应用
Elasticsearch索引之嵌套类型:深度剖析与实战应用
|
5月前
|
存储 JSON 定位技术
深入理解Elasticsearch的索引映射(mapping)
深入理解Elasticsearch的索引映射(mapping)
|
6月前
|
搜索推荐 JavaScript Java
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
89 0
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之源MySQL表新增字段后,要同步这个改变到Elasticsearch的步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章

下一篇
无影云桌面