首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用包含非法字符的Elasticsearch索引名称

问启用包含非法字符的Elasticsearch索引名称
EN

Stack Overflow用户
提问于 2015-12-04 09:54:58
回答 2查看 2K关注 0票数 1

我正在尝试使用像xxx/yyy和xxx yyy这样的字符串创建elasticsearch索引,但这些是不允许的,因为它们包含非法字符(/和)。这些名称在很大程度上是用户创建的,不在我的控制范围内,所以为了适应elasticsearch的需求而更改名称并不是一个真正的选择。

这是确切的错误消息:

代码语言:javascript
复制
[Error: InvalidIndexNameException[[XXX\%FFZZZ] Invalid index name [XXX\%FFZZZ], must not contain the following characters [\, /, *, ?, ", <, >, |,  , ,]]]

无论如何,我已经尝试过对字符串进行URL编码,但这并不起作用,因为这些字符串包含不允许的大写字母,而且反斜杠转义是不可能的,因为它在非法字符列表中。

这个问题有没有传统的解决方案,或者我必须想出一些粗略的序列化和/或散列方案来解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2015-12-04 12:29:57

嗯,让用户控制像索引名称这样的东西是自找麻烦的:)

但是,如果您愿意这样做,我建议您简单地删除所有非字母数字的字符,并将过程中的结果小写。

在PHP中,这是:

代码语言:javascript
复制
$index = preg_replace("/[^a-z0-9]+/i", "", $index);

在Java中:

代码语言:javascript
复制
index = index.replace("/[^a-z0-9]+/i", "");

在Javascript中:

代码语言:javascript
复制
index = index.replace(/[^a-z0-9]+/i, "");
票数 1
EN

Stack Overflow用户

发布于 2015-12-18 20:20:55

请不要允许用户定义索引名称。您可以尝试过滤掉非法字符,但是regexp可能会有问题,稍后可能会遇到麻烦。

此外,用户可能不理解,如果一个用户使用My_Index并在其中写入内容,而下一个用户试图访问yndex访问相同的索引,那么他们为什么会产生问题。

顺便说一下:上面给出的regexp比合法字符列表要求的更严格。例如,_是合法的(但不是在名称的开头),如果您想创建一个regexp,它允许ES标准中所有合法的东西,那么您的regexp将变得更加复杂且更容易出错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34079644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档