当我指的是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],不得包含以下字符[,\“,*,\,<,| 、、、>,/ 、?]
那么,任何人都可以确认是否允许#吗? 附言:如果我尝试使用#创建索引,它将创建索引,但会截断#以外的所有内容。
答案 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中指定它肯定是有效的,但是它将被删除。