【Elasticsearch】字段别名
在 Elasticsearch 中,字段别名(Field Alias)主要用于查询和检索阶段,而不是直接用于写入数据。
为什么不能通过字段别名写入数据?
字段别名本质上是一个映射关系,它将别名指向实际的字段。Elasticsearch 在索引数据时,是基于实际字段的映射(mapping)来存储数据的。字段别名只是一个查询时的“快捷方式”,并不改变数据的实际存储结构。因此,写入数据时,必须使用实际字段的名称,而不是别名。
示例
假设你有一个索引 `my_index`,其映射如下:
```json
PUT /my_index
{
"mappings": {
"properties": {
"actual_field": {
"type": "text"
},
"alias_field": {
"type": "alias",
"path": "actual_field"
}
}
}
}
```
在这个例子中,`alias_field` 是 `actual_field` 的别名。
查询时使用别名
查询时,可以通过别名来检索数据:
```json
GET /my_index/_search
{
"query": {
"match": {
"alias_field": "some text"
}
}
}
```
这实际上是查询 `actual_field` 的内容。
写入数据时
写入数据时,必须使用实际字段 `actual_field`,而不能使用别名 `alias_field`:
```json
POST /my_index/_doc/1
{
"actual_field": "some text"
}
```
如果尝试使用别名写入数据,会报错,因为 Elasticsearch 不支持通过别名写入数据。
总结
字段别名主要用于查询和检索阶段,不能用于写入数据。写入数据时,必须使用实际字段的名称。