使用Python Requests查询ElasticSearch

8

当我尝试使用Python请求查询ElasticSearch时,我无法完全检索结果。这是我的代码:

json_data = updateJson(sys.argv[1])

headers={'Accept': 'application/json', 'Content-type': 'application/json'}

elastic_url ='https://localhost:9200/logstash-kafka-wga-blueid-\*/_search'

query = json.dumps(json_data)

response = requests.get(elastic_url, data = query, auth=('xxx','xxx'), verify=False, headers = headers)

print response.text

我总是得到以下输出:

{"took":1,"timed_out":false,"_shards":{"total":0,"successful":0,"failed":0},"hits":{"total":0,"max_score":0.0,"hits":[]}}

但是,如果我尝试使用以下CURL命令,我会得到正确的结果。在上面的代码中,json_data从abc.json文件中读取json。上述代码有什么错误吗?

curl -X GET -k -u xxx:xxx https://localhost:9200/logstash-kafka-wga-blueid-\*/_search -d @temporaryRundeckReport.json

这是我的updateJson()方法:

def updateJson(fileName):
with open(fileName, 'r') as file:
    json_data = file.read()
    json_data = json_data.replace('%X-FORWARDED-HOST%', sys.argv[2]);
    json_data = json_data.replace('%TIME%', sys.argv[3]);
    json_data = json_data.replace('%INTERVAL%', sys.argv[4]);

with open('temporaryRundeckReport.json', 'w+') as file:
    os.chmod('temporaryRundeckReport.json',0o777)
    file.write(json_data)
    return json_data

你在命令行中传递的查询是什么?为什么不使用elasticsearch-py呢? - kichik
我传递文件名“abc.json”,从中读取json。 - akashag26
abc.json里面是什么?updateJson()函数是做什么的? - kichik
我已经在原始帖子中添加了该方法。 - akashag26
我正在使用通过requests模块存储在temporaryRundeckReport.json中的确切json_object。为什么这会修改结果? - akashag26
显示剩余2条评论
1个回答

0

我认为在Python版本中不需要转义星号*(删除斜杠):

elastic_url = 'https://localhost:9200/logstash-kafka-wga-blueid-*/_search'

但是,我建议使用python客户端库来替代requests


但是我的Elasticsearch索引包含""字符。我找到了解决方法,可以按照以下方式定义它:'https://localhost:9200/logstash-kafka-wga-blueid-\\/_search' - akashag26
@akashag26 我的意思不是要删除 * - 我的意思是你不需要在 * 前面加上斜杠(使用 ...blueid-* 而不是 ..blueid-\*)。在 shell 中需要使用斜杠来转义星号,但是当你将 URL 放入 Python 变量时,就不需要斜杠了。 - Borys Serebrov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接