别名字段类型编辑

一个 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
      }
    }
  }
}

指向目标字段的路径。请注意,这必须是完整的路径,包括任何父对象(例如 object1.object2.field)。

几乎所有搜索请求的组件都接受字段别名。特别是,别名可以在查询、聚合和排序字段中使用,以及在请求 docvalue_fieldsstored_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,例如 词向量,不能与字段别名一起使用。

最后,一些查询,例如 termsgeo_shapemore_like_this,允许从索引文档中获取查询信息。由于在获取文档时不支持字段别名,因此指定查找路径的查询部分不能通过其别名引用字段。