首页 > 解决方案 > ElasticSearch 别名的名称限制?

问题描述

我正在尝试使用 python 脚本创建一个包含 3 个别名的索引模板。我最初尝试这样做是成功的,但我最终更改了其中一个别名的名称,并且我看到了一些奇怪的行为。我的一个别名已被命名all-definitions,我将其更改为definitions-all. 当我这样做时,我收到了来自 ES 的 200 响应,一切似乎都很好——但是当我去查询我的别名时,它返回了一个index_not_found_exception错误。如果我然后运行,GET /_cat/aliases我会看到我创建的其他两个索引,但没有definitions-all。我玩了一下名字,结果如下:

据我所知,我是否有某种形式的definition(复数化与否)包含其中-all的某处 - 不会创建索引。再次 - 当我创建模板/别名时没有错误回来,只有 200 响应。我用来创建模板的 Python 脚本如下:

    url = '%s:%d/_template/tmpl_definitions' % (args.host, args.port)
    tmpl = {
        "index_patterns": ["definitions*"],
        "aliases": {
            "definitions-all": {},
            "definitions-active": {
                "filter": {
                    "bool": {
                          "must_not": {
                                "exists": {
                                    "field": "deleted_timestamp"
                                }
                          }
                    }
                }
            },
            "definitions-archived": {
                "bool": {
                    "filter": {
                        "exists": {
                            "field": "deleted_timestamp"
                        }
                    }
                }
            }
        }
    }
    resp = requests.put(url, json=tmpl, verify=not args.insecure)

definitions-activedefinitions-active完全按照我的预期行事。在我的脚本中,我首先创建模板,然后创建基础definitions索引。为了测试这些名称中的每一个,我采取了以下步骤:

  1. 删除现有模板
  2. 删除所有现有的定义* 索引。
  3. 运行创建模板和索引的脚本。

我还注意到,如果我从上面获取模板并通过 Kibana 手动运行它,则会创建模板但根本不会创建别名 - 无论名称如何。不确定那是什么意思?

我是 ES 的新手,所以我不确定我是否在这里遗漏了一些明显的东西,但我完全感到困惑。关于如何在 ES 中命名别名是否有限制?如果没有 - 谁能明白为什么我会看到我上面描述的行为?我应该选择一个不同的名字并忘记这整个混乱吗?

注意:我在本地 docker 实例上运行 ElasticSearch 7.12.0,并且使用的是 Python 3.9.1。

标签: python-3.xelasticsearchelasticsearch-7

解决方案


推荐阅读