如何通过Python调用Elasticsearch API并获取目标数据库URL
Elasticsearch接入URL获取及Python查询方法(Jupyter Notebook分析场景)
一、目标ES服务URL定位路径
- ES的API调用根URL格式固定为
<通信协议>://<ES服务/负载均衡IP/域名>:<服务端口>,默认端口规则:HTTP协议默认使用9200端口,HTTPS协议默认使用9243端口。 - 公司内部共用ES集群场景,直接找集群运维索要HTTP接入地址、待分析数据对应索引的访问权限,不要自行扫描服务端口,避免触发安全告警。
- 自建测试环境场景,直接查看ES部署目录下
elasticsearch.yml配置文件中的http.host、http.port配置项,两个配置项拼接后就是可用的根URL。 - 验证根URL有效性:在网络连通的环境执行
curl <拼接好的根URL>,如果返回带集群名称、版本号的JSON结果,说明地址有效。 - ES中不存在关系型数据库的"数据库"概念,*索引(Index)*对应关系型数据库中的表,也就是你要找的目标数据集位置。在根URL后拼接
/_cat/indices?v发起请求,就能拉取当前权限下所有可见的索引列表,从中定位你需要分析的目标索引即可。
二、Jupyter Notebook中Python调用ES的基础流程
- 环境安装,直接在Notebook单元中执行命令安装依赖:
!pip install elasticsearch pandas
- 基础连接、查询、转分析格式的示例代码:
from elasticsearch import Elasticsearch import pandas as pd # 初始化客户端,替换为你前面定位到的ES根URL es_client = Elasticsearch( "http://替换为你的ES根地址:端口", # 若集群开启账号密码认证,取消下面行的注释并填入对应信息 # basic_auth=("你的ES账号", "你的ES密码"), verify_certs=False # 自签名HTTPS证书场景使用,正规CA签发证书请删除该行 ) # 打印集群信息确认连接正常 print(es_client.info()) # 构造查询语句,替换为实际的查询条件、目标索引名 search_body = { "query": { "match_all": {} # 示例为全量查询,可替换为term、range等各类过滤条件 }, "size": 10000 # 单次查询返回的数据条数,根据实际分析需求调整 } search_resp = es_client.search(index="替换为你的目标索引名", body=search_body) # 将返回结果直接转为pandas DataFrame,即可开展后续数据分析工作 analysis_df = pd.json_normalize(search_resp["hits"]["hits"])
注意:单次拉取数据量超过1万条时,不要使用普通
search接口,改用客户端提供的scan游标方法拉取,避免触发ES默认的结果窗口限制报错。
内容的提问来源于stack exchange,提问作者Victoire
相关产品推荐
相关产品推荐

