Alias field type | Elasticsearch Guide [7.17] | Elastic
这里只针对data type的alias,暂时不说 index的alias。直接实战开始
PUT trips
{
"mappings": {
"properties": {
"distance": {
"type": "long"
},
"route_length_miles": {
"type": "alias",
"path": "distance"
},
"transit_mode": {
"type": "keyword"
}
}
}
}
-- 上面创建了一个trips的index 里面有三个字段 transit_mode,distance,route_length_miles
-- 插入一条自己造的数据
post trips/_doc
{
"distance":100,
"transit_mode":"cclovezbf"
}
-- 查询结果
GET _search
{
"query": {
"range" : {
"route_length_miles" : {
"gte" : 39
}
}
}
}
The path to the target field. Note that this must be the full path, including any parent objects (e.g.object1.object2.field
).注意 必须是全路径,如果原字段名的是object person {"name","cc","sex":"nan"},你想给name一个别名,必须是 "path": "person.name"
怎么理解这个alias呢?
其实可以看做是数据库里的view。
比如我建表的时候只有transit_mode 和distance字段,但是后面因为某些原因,我需要一个字段route_length_miles查询,所以我
create view trips_v as select distance,transit_mode, distance as route_length_miles from trips.
这样 我实际存储的还是两个字段,但是对外暴露的还是一个字段。
有人说这个有什么用呢?
Elasticsearch中别名alias相关操作(创建、更新、删除)_elasticsearch alias-CSDN博客
就是原先的数据字段mapping不能随便的修改,但是对外暴露的查询接口字段有需要新增。我们再看看官网给的说法
GET trips/field_caps?fields=route*,transit_mode
说了半天就是说这个alias字段和普通字段一样基本能正常使用,除了一些不支持的api
说了alias的一些限制
1.目标字段必须是固定的字段,不是一个对象或这个其他的字段的别名,也就是别名 不能是[keyword的别名]的别名。
2.别名创建的时候这个字段必须存在
3.如果object的type=nested,别名也必须是nested
4.别名只能为一个字段的别名。比如 p不能为person和perfect的别名
某些情况下是查不出别名字段的,比如_source 顾名思义,source就是原始字段,这个别名只能算是一个新增虚拟字段。