Elasticsearch 映射中的元字段:内置字段的作用与用法
在 Elasticsearch 中,元字段(Meta-fields)是索引文档时自动生成或可配置的内置字段,用于描述文档的元数据(如 ID、索引名)或控制文档的处理逻辑(如路由、存储)。这些字段是 Elasticsearch 内部机制的重要组成部分,理解它们的作用有助于优化查询性能和数据管理。
_all
字段:全局全文搜索字段
_all
字段是一个特殊的 “聚合字段”,它会将文档中所有字段的文本内容合并为一个大字符串,用于在不知道具体字段名的情况下进行全文搜索。
特性
- 默认情况下,
_all
字段会包含所有text
或keyword
类型字段的值(数字、日期等类型需显式配置才会被包含)。 - 6.0 版本后默认禁用,需手动开启。
配置与使用
1 | // 创建索引时开启 _all 字段 |
注意
_all
字段会增加索引存储和写入开销,仅在需要 “全局搜索” 场景下使用。- 可通过
include_in_all: false
排除特定字段(如敏感信息)。
_field_names
字段:非空字段跟踪
_field_names
字段记录文档中所有非空字段的名称,用于快速查询 “包含特定字段” 或 “包含任意非空字段” 的文档。
特性
- 自动索引文档中所有非空字段的名称,无需手动配置。
- 可通过
enabled: false
禁用(节省存储)。
配置与使用
1 | // 禁用 _field_names 字段(如需) |
_ignored
字段:跟踪被忽略的字段
_ignored
字段(6.4+ 新增)记录文档中因类型不匹配而被忽略的字段名称(如将字符串写入数字字段)。
作用
- 帮助排查数据写入异常,识别不符合映射定义的字段。
使用示例
1 | // 查询所有包含被忽略字段的文档 |
_id
字段:文档唯一标识
_id
字段是文档的唯一标识符,由用户指定或自动生成(如不指定 ID 时)。
特性
- 不参与全文索引,但可用于精确查询、更新、删除操作。
- 可在查询中通过
_id
字段过滤(需用terms
或ids
查询)。
使用示例
1 | // 通过 _id 字段查询 |
_index
字段:文档所属索引
_index
字段记录文档所在的索引名称,常用于跨索引查询时区分来源。
特性
- 可在查询、聚合、排序中使用,帮助分析多索引数据。
使用示例
1 | // 跨索引查询并按索引分组 |
_meta
字段:自定义元数据
_meta
字段用于存储应用程序特定的元数据(如映射版本、业务标识),不影响索引和查询,仅作为附加信息。
配置示例
1 | PUT my_index |
_routing
字段:分片路由控制
1 | _routing` 字段用于指定文档存储到哪个分片,默认值为文档的 `_id`,通过哈希算法计算分片位置: |
作用
- 自定义路由可将相关文档(如同一用户的所有数据)路由到同一分片,减少查询时的分片扫描,提升性能。
使用示例
1 | // 写入文档时指定路由 |
_source
字段:原始文档存储
_source
字段存储文档的原始 JSON 数据,查询时默认返回,便于查看完整文档内容。
特性
- 不建立索引,但会占用存储空间。
- 支持部分返回(通过
_source_include
/_source_exclude
筛选字段)。
配置与使用
1 | // 禁用 _source 字段(不推荐,会丢失原始数据) |
注意
禁用 _source
会导致以下功能失效:
- 更新操作(
update
、update_by_query
); - 高亮显示;
- 重建索引(
reindex
); - 调试与数据恢复。
已废弃的元字段
_type
字段(6.0+ 废弃)
- 早期用于区分索引内的文档类型(如同一索引下的
user
和order
类型)。 - 7.0+ 彻底移除,改用独立索引区分不同类型的文档。
_uid
字段(6.0+ 废弃)
- 早期为
_type
和_id
的组合(格式:type#id
),用于唯一标识文档。 - 随
_type
废弃而移除。
_parent
字段(逐步被 join
类型替代)
- 用于建立同一索引内文档的父子关系(如 “评论” 关联 “文章”)。
- 推荐使用
join
类型替代,功能更完善
v1.3.10