ES6升级ES7时GetIndexRequest查全索引触发系统索引访问警告如何解决
问题原因
ES 7.x版本开始将.kibana、.security这类以.开头的内置索引标记为系统索引,默认限制直接访问。你使用*作为索引通配符时会匹配到所有索引,包含上述系统索引,因此触发对应警告。
你之前仅将请求类型设置为open未生效,是因为系统索引本身默认处于open状态,该配置仅会过滤closed状态的索引,无法过滤系统索引。
解决方案
提供两种适配方案,可根据你的业务场景选择:
方案1:通配符直接排除系统索引
通常业务自定义索引不会以.开头,可直接在通配符中添加排除规则,语法为*,-.*:
*匹配所有索引-是排除规则标记.*匹配所有以.开头的索引
对应代码示例:
val request = GetIndexRequest() request.indices("*,-.*") val response = client.indices()[request, RequestOptions.DEFAULT]
方案2:通过IndicesOptions显式过滤系统索引
如果你的业务存在以.开头的自定义索引,不想全量排除所有.开头的索引,可通过配置索引选项显式排除ES官方标记的系统索引:
val request = GetIndexRequest() request.indices("*") // 配置索引选项,官方提供的系统索引过滤能力 val indicesOptions = IndicesOptions.builder() .excludeSystemIndices(true) // 核心配置:排除系统索引 .expandWildcardsOpen(true) // 保留匹配open状态索引的逻辑 .expandWildcardsClosed(false) .ignoreUnavailable(false) .allowNoIndices(true) .build() request.indicesOptions(indicesOptions) val response = client.indices()[request, RequestOptions.DEFAULT]
内容的提问来源于stack exchange,提问作者SergeiNotHa
相关产品推荐
相关产品推荐

