#elasticsearch
#elasticsearch
Вопрос:
Это мой шаблон индекса (упрощенный):
{
"template": "user-*",
"mappings" : {
"ESHOP_USER" : {
"properties" : {
"id" : {
"type" : "long"
},
"nickname" : {
"type" : "text"
},
"createTime" : {
"type" : "keyword"
},
"updateTime" : {
"type" : "keyword"
}
}
}
},
"aliases" : {
"user-test-alias" : {
"index" : "user-test*"
},
"user-prod-alias" : {
"index" : "user-prod*"
}
}
}
Что я хочу сделать:
Индексы с шаблоном имен user-*
используют один и тот же шаблон, и я хочу добавить user-test-alias
ко всем индексам шаблон имен user-test*
и user-prod-alias
ко всем индексам шаблон имен user-prod*
.
Что я получил:
С помощью приведенного выше шаблона я получил все индексы с шаблоном имен, user-*
получив два псевдонима: user-test-alias
и user-prod-alias
.
Я знал, что если я разделю этот шаблон на шаблоны тестирования и prod или использую POST /_aliases
после создания индексов, я смогу решить проблему. Но есть ли какой-то способ достичь моей цели только с одним шаблоном индекса?
Ответ №1:
Что я бы сделал, так это использовал 3 шаблона:
- тот, который является общим для обеих сред
- один для теста (только для псевдонима)
- один для prod (также только для псевдонима)
Первый шаблон (общий), примененный первым:
{
"template": "user-*",
"order": 0,
"mappings" : {
"ESHOP_USER" : {
"properties" : {
"id" : {
"type" : "long"
},
"nickname" : {
"type" : "text"
},
"createTime" : {
"type" : "keyword"
},
"updateTime" : {
"type" : "keyword"
}
}
}
}
}
Второй шаблон (тестовый псевдоним) применяется следующим:
{
"template": "user-test-*",
"order": 1,
"aliases" : {
"user-test-alias" : {
"index" : "user-test*"
}
}
}
Третий шаблон (псевдоним prod) применяется следующим:
{
"template": "user-prod-*",
"order": 1,
"aliases" : {
"user-prod-alias" : {
"index" : "user-prod*"
}
}
}