别名字段类型
编辑别名字段类型
编辑alias
映射定义了索引中字段的备用名称。别名可以在 搜索 请求以及其他选定的 API(如 字段能力)中替代目标字段使用。
resp = client.indices.create( index="trips", mappings={ "properties": { "distance": { "type": "long" }, "route_length_miles": { "type": "alias", "path": "distance" }, "transit_mode": { "type": "keyword" } } }, ) print(resp) resp1 = client.search( query={ "range": { "route_length_miles": { "gte": 39 } } }, ) print(resp1)
response = client.indices.create( index: 'trips', body: { mappings: { properties: { distance: { type: 'long' }, route_length_miles: { type: 'alias', path: 'distance' }, transit_mode: { type: 'keyword' } } } } ) puts response response = client.search( body: { query: { range: { route_length_miles: { gte: 39 } } } } ) puts response
const response = await client.indices.create({ index: "trips", mappings: { properties: { distance: { type: "long", }, route_length_miles: { type: "alias", path: "distance", }, transit_mode: { type: "keyword", }, }, }, }); console.log(response); const response1 = await client.search({ query: { range: { route_length_miles: { gte: 39, }, }, }, }); console.log(response1);
PUT trips { "mappings": { "properties": { "distance": { "type": "long" }, "route_length_miles": { "type": "alias", "path": "distance" }, "transit_mode": { "type": "keyword" } } } } GET _search { "query": { "range" : { "route_length_miles" : { "gte" : 39 } } } }
搜索请求的几乎所有组件都接受字段别名。特别是,别名可以在查询、聚合和排序字段中使用,以及在请求 docvalue_fields
、stored_fields
、建议和高亮显示时使用。脚本在访问字段值时也支持别名。有关例外情况,请参阅 不支持的 API 部分。
在搜索请求的某些部分和请求字段功能时,可以提供字段通配符模式。在这些情况下,通配符模式将匹配字段别名以及具体的字段。
resp = client.field_caps( index="trips", fields="route_*,transit_mode", ) print(resp)
response = client.field_caps( index: 'trips', fields: 'route_*,transit_mode' ) puts response
const response = await client.fieldCaps({ index: "trips", fields: "route_*,transit_mode", }); console.log(response);
GET trips/_field_caps?fields=route_*,transit_mode
别名目标
编辑别名的目标有一些限制
- 目标必须是一个具体的字段,而不是一个对象或另一个字段别名。
- 目标字段必须在创建别名时存在。
- 如果定义了嵌套对象,则字段别名必须具有与其目标相同的嵌套范围。
此外,字段别名只能有一个目标。这意味着不可能使用字段别名在单个子句中查询多个目标字段。
可以通过映射更新将别名更改为引用新的目标。一个已知的限制是,如果任何存储的渗透查询包含字段别名,它们仍将引用其原始目标。更多信息可以在渗透器文档中找到。
不支持的 API
编辑不支持写入字段别名:尝试在索引或更新请求中使用别名将导致失败。同样,别名不能用作 copy_to
的目标或在多字段中使用。
由于别名名称不存在于文档源中,因此在执行源过滤时不能使用别名。例如,以下请求将为 _source
返回一个空结果
resp = client.search( query={ "match_all": {} }, source="route_length_miles", ) print(resp)
response = client.search( body: { query: { match_all: {} }, _source: 'route_length_miles' } ) puts response
const response = await client.search({ query: { match_all: {}, }, _source: "route_length_miles", }); console.log(response);
GET /_search { "query" : { "match_all": {} }, "_source": "route_length_miles" }
目前,只有搜索和字段功能 API 会接受并解析字段别名。其他接受字段名称的 API,例如 词向量,不能与字段别名一起使用。
最后,一些查询(如 terms
、geo_shape
和 more_like_this
)允许从索引的文档中获取查询信息。由于在获取文档时不支持字段别名,因此指定查找路径的查询部分不能通过别名引用字段。