具有#个字符的弹性索引名称

时间:2018-09-25 01:27:44

标签: elasticsearch

当我指的是6.4 version docs时,我注意到有关索引名称限制的以下内容:

  

不能包含\,/,*,?,“,<,>,|,(空格字符)、、、#

但是,当我尝试创建带有'>'字符的索引时,返回了以下错误:

输入: 在以下位置放置PUT请求:http://localhost:9200/tw>itter

输出:

    {
    "error": {
        "root_cause": [
            {
                "type": "invalid_index_name_exception",
                "reason": "Invalid index name [tw>itter], must not contain the following characters [ , \", *, \\, <, |, ,, >, /, ?]",
                "index_uuid": "_na_",
                "index": "tw>itter"
            }
        ],
        "type": "invalid_index_name_exception",
        "reason": "Invalid index name [tw>itter], must not contain the following characters [ , \", *, \\, <, |, ,, >, /, ?]",
        "index_uuid": "_na_",
        "index": "tw>itter"
    },
    "status": 400
}

请注意,错误字符串没有#字符作为限制。

  

无效的索引名称[tw> itter],不得包含以下字符[,\“,*,\,<,| 、、、>,/ 、?]

那么,任何人都可以确认是否允许#吗? 附言:如果我尝试使用#创建索引,它将创建索引,但会截断#以外的所有内容。

1 个答案:

答案 0 :(得分:0)

索引名中不允许使用#字符,即使您对其进行URL编码也无法使用:

PUT test%23hash

结果:

{
  "error": {
    "root_cause": [
      {
        "type": "invalid_index_name_exception",
        "reason": "Invalid index name [test#hash], must not contain '#'",
        "index_uuid": "_na_",
        "index": "test#hash"
      }
    ],
    "type": "invalid_index_name_exception",
    "reason": "Invalid index name [test#hash], must not contain '#'",
    "index_uuid": "_na_",
    "index": "test#hash"
  },
  "status": 400
}

真理的最终来源是代码,我们可以在Strings.java (L376-377)中看到,禁止使用的字符是'\\', '/', '*', '?', '"', '<', '>', '|', ' ', ','

但是,这还不是全部,MetaDataIndexTemplateService class还有一个有趣的validate方法可以拒绝上述所有字符以及#字符。

如您所见,尝试创建带有未URL编码的#符号的索引是可行的,但是从#符号开始删除的所有内容都可以。这是因为#符号是URL中的保留字符,并分隔query fragments,因此在URL中指定它肯定是有效的,但是它将被删除。