python导出ES数据

from elasticsearch import Elasticsearch
from elasticsearch import helpers
import openpyxl


class EsToExcel(object):
    def __init__(self, es_host, index, type, file_name):
        """
        :param es_host: es连接地址 例: 127.0.0.1:9200
        :param index: 索引名
        :param type: type名
        :param file_name: 导出文件名
        """
        self.es = Elasticsearch([es_host])
        self.index = index
        self.type = type
        self.file_name = file_name
        self.item_list = []

    def get_field(self):
        """
        获取字段信息
        :return: 字段信息
        """
        field_list = list(self.es.indices.get_mapping(index=self.index)
                          [self.index]['mappings']['properties'])
        print(field_list)
        return field_list

    def get_data(self):
        """
        获取索引下所有数据
        :return: 数据纪录
        """
        query = {
            "query": {
                "match_all": {

                }
            }
        }
        scanResp = helpers.scan(client=self.es, query=query, scroll="5m", index=self.index,
                                request_timeout=100)
        for resp in scanResp:
            item = resp['_source']
            yield item

    def deal_data(self, item, field_list):
        """
        :param item: es查询出的数据纪录
        :param field_list: 对应的字段信息
        :return: 处理好的数据纪录
        """
        new_item = [str(item.get(field, '')) for field in field_list]
        return new_item

    def write_excel(self, item_list, style):
        """
        写入Excel
        :param item_list: 数据集
        :param style: 表头信息
        :return:
        """
        f = openpyxl.Workbook()
        sheet1 = f.active
        for index, i in enumerate(style):
            # openpyxl生成xlsx文件,行列从1开始
            sheet1.cell(row=1, column=index + 1, value=i)
        for row, item in enumerate(item_list):
            try:
                for index, i in enumerate(item):
                    # openpyxl生成xlsx文件,行列从1开始
                    sheet1.cell(row=row + 2, column=index + 1, value=i)
            except Exception as e:
                print(e)

        f.save('{}.xlsx'.format(self.file_name))
        print('{}数据导出完成'.format(self.file_name))

    def start(self):
        """运行主函数"""
        field_list = self.get_field()
        for item in self.get_data():
            new_item = self.deal_data(item, field_list)
            self.item_list.append(new_item)
        self.write_excel(self.item_list, field_list)


if __name__ == '__main__':
    export = EsToExcel(es_host='http://172.18.30.93:9200/', index='laisibei_index_upgrade', type="_doc", file_name='laisibei_index_upgrade')
    export.start()
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值