分享一段使用python,通过使用发送post请求的方式,来从es集群中获取数据。不用使用 elasticsearh,仅需要导入request和json包即可。
开源sql插件官方 文档
GitHub - NLPchina/elasticsearch-sql: Use SQL to query Elasticsearch
示例代码
调试过,可运行,得到的结果,为kibana界面上展示的结果,需要自己解析hit里边的数据。agg聚合分析结果在 aggregations里边。可以看打印的结果!
如果包错,没有requests包,则导入即可。
pip install requests
import requests
import json
def execute_sql_and_get_json_response(sql_query):
# 定义请求的URL和头部
url = "http://localhost:9200/_nlpcn/sql"
headers = {'Content-Type': 'application/json'}
# 确保数据是以UTF-8编码的字节串
data_encoded = sql_query.encode('utf-8')
# 发送POST请求
response = requests.post(url, headers=headers, data=data_encoded, params={"pretty": "true"})
# 处理响应
if response.status_code == 200:
# 返回原始JSON响应文本
return response.text
else:
raise Exception(f"请求失败,状态码:{response.status_code}\n错误信息:{response.text}")
# 使用方法示例
sql_query = 'select * from indexName WHERE = "MTJJ" AND age <> "38"'
try:
json_response = execute_sql_and_get_json_response(sql_query)
# 如果需要将响应内容转化为Python字典,可以使用 json.loads 方法
python_dict_response = json.loads(json_response)
# 对python_dict_response进行后续处理
print(python_dict_response)
except Exception as e:
print(e)
遇到问题
sql中的不等号解析有问题,调用报错,需要用 <> 代表 !=
结果需要自己解析,输出的json结果和kibana上的结果一样