你不会是程序猿吧?

logstash向es里面导入mysql数据,表字段名称自动变成了小写

Elasticsearch | 作者 qjdhbdj | 发布于2018年05月04日 | 阅读数:11452

用logstash向es里面导入mysql数据的时候,表字段按照驼峰式命名,但是数据导进去之后,字段名称全都变成了小写。哪位大神知道这个是什么情况啊,es是5.5.0版本
已邀请:

qjdhbdj

赞同来自: laoyang360 a1350018340 hai

感谢各位的热心帮助,找到了问题的原因,我是使用logstash同步mysql数据的,因为在jdbc.conf里面没有添加 lowercase_column_names => "false"  这个属性,所以logstash默认把查询结果的列明改为了小写,同步进了es,所以就导致es里面看到的字段名称全是小写。
最后总结:es是支持大写字段名称的,问题出在logstash没用好,需要在同步配置中加上 lowercase_column_names => "false"  。记录下来希望可以帮到更多人,哈哈。

JackGe

赞同来自: laoyang360 CarrieJin

es中索引名称不支持大写,包含#,以_开头。具体查看MetaDataCreateIndexService类的validateIndexName方法
public void validateIndexName(String index, ClusterState state) {
if (state.routingTable().hasIndex(index)) {
throw new IndexAlreadyExistsException(new Index(index));
}
if (state.metaData().hasIndex(index)) {
throw new IndexAlreadyExistsException(new Index(index));
}
if (!Strings.validFileName(index)) {
throw new InvalidIndexNameException(new Index(index), index, "must not contain the following characters " + Strings.INVALID_FILENAME_CHARS);
}
if (index.contains("#")) {
throw new InvalidIndexNameException(new Index(index), index, "must not contain '#'");
}
if (index.charAt(0) == '_') {
throw new InvalidIndexNameException(new Index(index), index, "must not start with '_'");
}
if (!index.toLowerCase(Locale.ROOT).equals(index)) {
throw new InvalidIndexNameException(new Index(index), index, "must be lowercase");
}
int byteCount = 0;
try {
byteCount = index.getBytes("UTF-8").length;
} catch (UnsupportedEncodingException e) {
// UTF-8 should always be supported, but rethrow this if it is not for some reason
throw new ElasticsearchException("Unable to determine length of index name", e);
}
if (byteCount > MAX_INDEX_NAME_BYTES) {
throw new InvalidIndexNameException(new Index(index), index,
"index name is too long, (" + byteCount +
" > " + MAX_INDEX_NAME_BYTES + ")");
}
if (state.metaData().hasAlias(index)) {
throw new InvalidIndexNameException(new Index(index), index, "already exists as alias");
}
if (index.equals(".") || index.equals("..")) {
throw new InvalidIndexNameException(new Index(index), index, "must not be '.' or '..'");
}
}

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

我印象中不支持大写。你插入个大写看报错不?

youryida - 简单的事情细心做!

赞同来自:

索引名称不支持大写,字段属性可以

要回复问题请先登录注册