Elasticsearch客户端:索引名中包含*时无法获取数据
我写了以下这段Python代码,用来从我的Elastic部署中获取数据:
from elasticsearch import Elasticsearch
client = Elasticsearch(<endpoint>,api_key=(<API key ID>,<secret>))
client.get(index="abc-001",id = '--index001')
这段代码运行得很好,能给我返回一个对象API响应。
但是如果我稍微改动一下代码,比如这样:
client.get(index="abc-*",id = '--index001')
就会出现一个错误:
AuthorizationException: AuthorizationException(403, 'security_exception', 'action [indices:data/read/get] is unauthorized for API key id [<id>] of user [<user>], this action is granted by the index privileges [read,all]')
我在使用 client.exists(index,id)
时也遇到了同样的问题。
我需要假设我不知道完整的索引名称,但我想知道索引 "abc-*" 是否存在于部署中。如果能忽略ID,只知道这个索引是否存在,那就太好了。
1 个回答
0
问题
根据错误提示,你没有权限访问 indexName*
。可能是你的权限被限制了,只能访问单个索引名称(比如 abc-001、abc-002 等),而不能访问 abc-*
这样的通配符。
所以请检查一下你的角色权限,看看你是否有这样的访问权限。你可以通过两种方式来检查:
- 使用 Kibana 管理仪表板,查看角色部分
- 使用下面的查询:
GET _security/role/<your-role-name>
如果你没有被授予权限,请申请一下,因为没有其他方法可以解决这个问题!
解决方案
你需要获得这样的访问权限。你可以使用 Kibana 仪表板(更简单的方法)或者查询的方式来实现。(这里