首页 > 解决方案 > 在 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在创建索引后使用,我可以解决问题。但是有没有办法只用一个索引模板来实现我的目标?

标签: elasticsearch

解决方案


我要做的是使用 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*"
      }
  }
}

推荐阅读