0%

elasticsearch映射中的元字段

elasticsearch映射中的元字段

元字段是为了保证系统正常运转的内置字段

_all字段

_all字段是一个特殊的包含所有内容的字段,使用_all字段可以对文档的值进行搜索而不必知道包含所需值的字段名

1
2
3
4
5
6
7
8
GET /my_index/_search
{
"query": {
"match": {
"_all": "john smith 1970" // 使用_all可以匹配所有字段
}
}
}

_field_names字段

使用_field_names字段表示文档中每个字段都是非空字段

1
2
3
4
5
6
7
8
9
{
"mappings": {
"_doc": {
"_field_names": {
"enabled": false
}
}
}
}

_ignored字段

6.4新加的字段

1
2
3
4
5
6
7
{
"query": {
"exists": {
"field": "_ignored"
}
}
}

_id字段

_id字段表示的是文档的唯一id

_index字段

在多个索引中执行查询时,有时需要添加查询子句来关联特定的索引文档,_index字段可以匹配包含某个文档的索引,在term或terms查询、聚合、脚本、排序时都可访问_index中的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
GET index_1,index_2/_search
{
"query": {
"terms": {
"_index": ["index_1", "index_2"]
}
},
"aggs": {
"indices": {
"terms": {
"field": "_index",
"size": 10
}
}
},
"sort": [
{
"_index": {
"order": "asc"
}
}
],
"script_fields": {
"index_name": {
"script": {
"lang": "painless",
"source": "doc['_index']"
}
}
}
}

_meta字段

_meta是一个可以用来自定义的元数据,可以来存储应用程序的特定元数据

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"mappings": {
"_doc": {
"_meta": {
"class": "MyApp::User",
"version": {
"min": "1.0",
"max": "1.3"
}
}
}
}
}

_routing字段

可以使用_rounting字段来进行路由到特定的分片,其公式是

shard_num = hash(_routing) % num_primary_shards

默认情况下_routing_id

在搜索时,可以使用路由来进行搜索,只会进行指定路由的搜索,而不会进行所有分片的搜索

1
GET my_index/_doc/1?routing=user1 

_source字段

_source字段中存储的是原始的json数据,字段本身不建立索引,但是会被存储,当执行获取请求时可以返回_source字段,但是_source字段会对索引产生存储开销,可以选择禁用_source字段

1
2
3
4
5
6
7
8
9
{
"mappings": {
"_doc": {
"_source": {
"enabled": false
}
}
}
}

但是禁用的话会导致部分功能无法使用,如

  • update、update_by_query、reindex等API不可被使用
  • 高亮显示
  • 重建索引功能
  • 调试功能
  • 自动修复索引功能

_type字段

6.0版本废弃

_type字段的目的通过类型名加快搜索进度

_uid字段

6.0版本废弃

每个索引都包含_type_id字段,这两个值结合为{type}#{id}作为_uid