# coding: utf-8 import json import requests from base_framework.public_tools.custom_error import BusinessError class ElasticsearchApi: """ | 功能说明: | 查询Elasticsearch | | 作者信息: | 作者 huaxuemin | | 修改时间: | 2022-12-05 | """ def __init__(self): self.es_url = "http://es-cn-zvp2bgn8a004cbosn.elasticsearch.aliyuncs.com:9200" self.headers = {"Authorization": "Basic ZWxhc3RpYzpMa3N3aV5hbEl3"} def kw_es_query(self, es_query_body, index="user_personas_index_qa", es_url=None, headers=None): """ | 功能说明: | 查询es | | 输入参数: | | | es_query_body | es请求参数,符合es语法 | | | index | 索引 | | | es_url | es_url | | 返回参数: | json | | 作者信息: | 作者 huaxuemin | 修改时间 2022-12-05 | 说明:根据es语法查询es """ es_url = es_url if es_url else self.es_url req_es_url = es_url + "/" + index + "/" + "_search" headers = self.headers.update(headers) if headers else self.headers try: res = requests.post(req_es_url, json=es_query_body, headers=headers) return json.loads(res.text) except Exception as e: return e def kw_es_replace(self, es_id, es_replace_body, index="user_personas_index_qa", es_url=None, headers=None): """ | 功能说明: | 根据id替换es数据 | | 输入参数: | | | es_id | es_id | | | es_query_body | es请求参数,符合es语法 | | | index | 索引 | | | es_url | es_url | | 返回参数: | json | | 作者信息: | 作者 huaxuemin | 修改时间 2022-12-05 | 说明:根据es语法替换es数据 """ es_url = es_url if es_url else self.es_url req_es_url = es_url + "/" + index + "/" + "_doc" + "/" + es_id headers = self.headers.update(headers) if headers else self.headers try: res = requests.post(req_es_url, json=es_replace_body, headers=headers) return json.loads(res.text) except Exception as e: return e def kw_dbs_to_es(self, index_name, env="qa", es_svr="db-to-es"): """ | 功能说明 | 同步某个索引的es数据 | | 请求参数名 | 说明 | 类型 | 是否必填 | 如无要求时的值 | | index_name | 索引名称 | string | 0 | peppa-classes-supply | | env | 环境,qa,sim | string | 0 | qa | | es_svr | ES服务,db-to-es,teach-to-es等 | string | 0 | db-to-es | :return 详见: https://tm.huohua.cn/162891389180100609/articles/215540479291179010 教务接口切换ES详见apollo配置:peppa-teach-common teach.common change.to.es """ if env not in ("qa", "sim"): raise BusinessError("只支持qa和sim") resp = requests.get(url="http://{}.{}.huohua.cn?index={}".format(es_svr, env, index_name)) if resp.status_code != 200: raise Exception('同步失败,错误信息:{}'.format(resp.text)) return True if __name__ == '__main__': es = ElasticsearchApi() # print(es.kw_dbs_to_es(index_name='peppa-classes-supply')) q_sql = {"query":{"bool":{"must":[{"term":{"classes.business_region":"101"}},{"term":{"classes.year":"2023"}}],"must_not":[],"should":[]}},"from":0,"size":10,"sort":[{"classes.id":{"order":"desc"}}],"aggs":{}} q_url = "http://10.250.200.194:9200" rsp = es.kw_es_query(es_query_body=q_sql, es_url=q_url, index="peppa-classes-supply2") print(rsp)