我正在尝试使用xxx/yyy
和xxx yyy
之类的字符串创建elasticsearch索引,但由于它们包含非法字符(/
和),因此不允许使用这些索引。这些名称很大程度上是用户创建的,不受我的控制,因此,为了适应elasticsearch的要求而更改名称实际上不是一个选择。
这是确切的错误消息:
[Error: InvalidIndexNameException[[XXX\%FFZZZ] Invalid index name [XXX\%FFZZZ], must not contain the following characters [\, /, *, ?, ", <, >, |, , ,]]]
无论如何,我已经尝试对字符串进行URL编码,但这是行不通的,因为其中包含不允许使用的大写字母,并且由于在非法字符列表中,反斜杠转义是不可能的。
是否有解决此问题的常规方法,还是我必须提出一些粗略的序列化和/或哈希方案来解决此问题?
最佳答案
嗯,让用户可以控制诸如索引名之类的事情正在引起麻烦:)
但是,如果您愿意走这条路,我建议您只是删除所有不是字母数字的字符,并在处理过程中将结果小写。
在PHP中将是:
$index = preg_replace("/[^a-z0-9]+/i", "", $index);
在Java中:
index = index.replace("/[^a-z0-9]+/i", "");
用Javascript:
index = index.replace(/[^a-z0-9]+/i, "");
关于regex - 使用非法字符启用Elasticsearch索引名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34079644/