别名字段类型
编辑别名字段类型编辑
一个 alias
映射定义了索引中字段的另一个名称。别名可以在 搜索 请求中代替目标字段使用,以及在其他一些 API 中使用,例如 字段功能。
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
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 的部分。
在搜索请求的某些部分以及请求字段功能时,可以提供字段通配符模式。在这些情况下,通配符模式将匹配字段别名以及具体字段
response = client.field_caps( index: 'trips', fields: 'route_*,transit_mode' ) puts response
GET trips/_field_caps?fields=route_*,transit_mode
别名目标编辑
对别名的目标有一些限制
- 目标必须是具体字段,而不是对象或其他字段别名。
- 目标字段必须在创建别名时存在。
- 如果定义了嵌套对象,则字段别名必须与其目标具有相同的嵌套范围。
此外,字段别名只能有一个目标。这意味着不可能使用字段别名在一个子句中查询多个目标字段。
可以通过映射更新将别名更改为引用新目标。一个已知的限制是,如果任何存储的渗透器查询包含字段别名,它们将仍然引用其原始目标。有关更多信息,请参阅 渗透器文档。
不支持的 API编辑
不支持写入字段别名:尝试在索引或更新请求中使用别名将导致失败。同样,别名不能用作 copy_to
的目标或在多字段中使用。
由于别名名称不存在于文档源中,因此在执行源过滤时不能使用别名。例如,以下请求将为 _source
返回空结果
response = client.search( body: { query: { match_all: {} }, _source: 'route_length_miles' } ) puts response
GET /_search { "query" : { "match_all": {} }, "_source": "route_length_miles" }
目前,只有搜索和字段功能 API 将接受和解析字段别名。其他接受字段名称的 API,例如 词向量,不能与字段别名一起使用。
最后,一些查询,例如 terms
、geo_shape
和 more_like_this
,允许从索引文档中获取查询信息。由于在获取文档时不支持字段别名,因此指定查找路径的查询部分不能通过其别名引用字段。