在ElasticSearch索引模板别名中使用通配符

时间:2019-03-13 03:43:31

标签: 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-aliasuser-prod-alias

我知道是将模板拆分成测试模板和生产模板,还是在创建索引后使用POST /_aliases都可以解决问题。但是,只有一个索引模板有什么方法可以实现我的目标吗?

1 个答案:

答案 0 :(得分:1)

我要做的是使用3个模板:

  • 两个环境都通用的一个
  • 一个用于测试(仅用于别名)
  • 一个用于生产(也用于别名)

首先应用第一个模板(常见):

{
  "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*"
      }
  }
}

接下来应用第三种模板(产品别名):

{
  "template": "user-prod-*",
  "order": 1,
  "aliases" : {
      "user-prod-alias" : {
          "index" : "user-prod*"
      }
  }
}