在Elasticsearch中,元字段(Meta-fields)是系统自动为每一份文档添加的特殊字段,它们提供了有关文档存储和检索过程中的重要上下文信息。以下是一些主要的元字段以及它们的作用:
-
_index
: 指定文档存储所在的索引名称。这是文档在Elasticsearch集群中的逻辑分区。{ "_index": "my_index" }
-
_type
: 在Elasticsearch 6.x之前,_type
用于在同一索引内组织不同类型的数据。然而,从Elasticsearch 7.x开始,已经弃用了_type
,所有的文档都归于单个类型,且默认类型为_doc
。// 在ES 6.x及之前版本中 { "_index": "my_index", "_type": "my_type" } // 在ES 7.x及以后版本中,已无_type字段 { "_index": "my_index", "_id": "1" }
-
_id
: 表示文档的唯一标识符。每个文档在其所属的索引和类型(如果适用)下必须有一个唯一的ID。可以直接指定或由Elasticsearch自动生成。{ "_index": "my_index", "_id": "unique_id_here", // ... }
-
_source
: 包含了原始文档内容的字段。它是文档的实际数据,可以被检索、返回给客户端。{ "_index": "my_index", "_id": "1", "_source": { "title": "Example Title", "content": "This is the content of the example document.", // 其他字段... } }
-
_routing
: 可选的路由键,用于确定文档应存储在哪个分片上。它可以帮助优化请求路由和查询性能,特别是在涉及parent-child关系或某些特定的定制路由策略时。PUT my_index/_doc/1?routing=user_id { "user_id": "user123", "content": "..." }
-
_version
: 每次文档更新都会增加的版本号,用于实现乐观并发控制(Optimistic Concurrency Control),确保在并发环境下进行安全的更新和删除操作。 -
_score
: 在执行查询时,Elasticsearch会给每个匹配文档计算一个相关度得分,这个得分存储在_score
字段中,用于排序结果。 -
其他元字段还包括:
_timestamp
(已废弃)、_ttl
(已废弃,在7.x版后不再支持)、_field_names
、_all
(在6.x版后默认禁用)等。
实战中,这些元字段会在文档的CRUD操作中频繁出现,比如在创建文档时指定_index
和_id
,在查询时利用_routing
进行高效查询,或者在获取文档时查看_source
的内容和_version
来确保数据一致性。