Elasticsearch客户端:索引名中包含*时无法获取数据

0 投票
1 回答
23 浏览
提问于 2025-04-12 18:23

我写了以下这段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-* 这样的通配符。

所以请检查一下你的角色权限,看看你是否有这样的访问权限。你可以通过两种方式来检查:

  1. 使用 Kibana 管理仪表板,查看角色部分
  2. 使用下面的查询:
GET _security/role/<your-role-name>

如果你没有被授予权限,请申请一下,因为没有其他方法可以解决这个问题!

解决方案

你需要获得这样的访问权限。你可以使用 Kibana 仪表板(更简单的方法)或者查询的方式来实现。(这里

撰写回答