
在 Elasticsearch 中,索引模板和索引别名是两个重要的功能,它们分别用于定义索引的默认设置和映射,以及为索引提供更灵活的访问方式。
索引模板用于在新索引创建时自动应用默认设置和映射。它们非常适合用于确保特定类型的索引具有一致的配置。索引模板可以包括设置、映射和别名。
PUT /_index_template/my_template
{
"index_patterns": ["logs-*"], // 匹配所有以 "logs-" 开头的索引
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"timestamp": {
"type": "date"
},
"message": {
"type": "text"
},
"user_id": {
"type": "keyword"
}
}
},
"aliases": {
"logs": {} // 为所有匹配的索引添加别名 "logs"
}
},
"priority": 100 // 模板的优先级
}
priority:模板的优先级。优先级越高,模板越先应用。
当你创建一个匹配模板的索引时,模板会自动应用。
PUT /logs-2024-06-20
{
"aliases": {
"current_logs": {} // 可以覆盖模板中的别名
}
}
新索引 logs-2024-06-20
将自动应用 my_template
的设置和映射。
索引别名为一个或多个索引提供一个逻辑名称,使得你可以通过别名而不是具体索引名称来访问索引。别名可以指向单个索引或多个索引,并且可以在读写操作中使用。
创建别名
POST /_aliases
{
"actions": [
{
"add": {
"index": "logs-2024-06-20",
"alias": "current_logs"
}
}
]
}
使用别名进行查询
GET /current_logs/_search
{
"query": {
"match_all": {}
}
}
使用别名进行索引
POST /current_logs/_doc
{
"user_id": "user1",
"message": "User logged in",
"timestamp": "2024-06-20T12:00:00"
}
别名还可以带有过滤条件和路由,用于更细粒度地控制索引访问。
POST /_aliases
{
"actions": [
{
"add": {
"index": "logs-*",
"alias": "user_logs",
"filter": {
"term": {
"user_id": "user1"
}
}
}
}
]
}
此别名 user_logs 仅返回 user_id 为 "user1" 的文档。
POST /_aliases
{
"actions": [
{
"add": {
"index": "logs-*",
"alias": "user_logs",
"routing": "user1"
}
}
]
}
此别名 user_logs 在路由为 "user1" 时使用。
通过组合使用索引模板和别名,可以简化索引管理和访问。例如,你可以为所有日志索引应用一个模板,然后使用别名来简化对这些索引的访问和操作。
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"timestamp": {
"type": "date"
},
"message": {
"type": "text"
},
"user_id": {
"type": "keyword"
}
}
},
"aliases": {
"all_logs": {}
}
},
"priority": 100
}
创建索引时,模板自动应用,别名 all_logs 自动添加:
PUT /logs-2024-06-20
现在可以通过 all_logs 别名来查询所有日志索引:
GET /all_logs/_search
{
"query": {
"match_all": {}
}
}
通过这些功能,你可以有效管理和访问 Elasticsearch 索引,确保数据的组织和检索更加灵活和高效。