zoukankan      html  css  js  c++  java
  • python连接 elasticsearch 查询数据,支持分页

    使用python连接es并执行最基本的查询

    from elasticsearch import Elasticsearch
    es = Elasticsearch(["localhost:9200"])
    para = {"_source":"message"}
    es.search(index=index_name, q='offset: xx', doc_type='doc' ,params=para, size=10)
    
    常用参数:
    index - 索引名
    q - 查询指定匹配 使用Lucene查询语法
    from_ - 查询起始点  默认0
    doc_type - 文档类型
    size - 指定查询条数 默认10
    params - 查询的字段
    
    #!/usr/bin/python
    # coding=utf-8
    
    import datetime
    import sys
    import getopt
    from elasticsearch import Elasticsearch
    
    """
    初始化elasticsearch连接
    """
    def init_es():
        return Elasticsearch(["localhost:9200"])
    
    """
    查询数据
    """
    def query_data(log_date, puid, count):
        es = init_es()
        para = {"_source":"message"}
        index_name = "center-"+log_date
        data_array = es.search(index=index_name, q='offset: "'+ str(puid) +'"', doc_type='doc' ,params=para, size=int(count))
    
        print_data(data_array, count)
    
    """
    分页查询数据
    """
    def query_data_by_page(log_date, puid, page_count, page_num):
        es = init_es()
        para = {"_source":"message"}
        index_name = "center-"+log_date
        from_page = int(page_count) * (int(page_num)-1)
    
        data_array = es.search(index=index_name, q='offset: "'+ str(puid) +'"', doc_type='doc' ,params=para, size=int(page_count), from_=from_page)
    
        print_data(data_array, page_count)
    
    """
    打印数据
    """
    def print_data(data_array, count):
    
        datas = data_array["hits"]["hits"]
    
        print "符合条件的数据总条数为:" + str(data_array['hits']['total'])
        print "具体内容如下:"
        for data in datas:
            print data['_source']['message']
    
    """
    处理逻辑调用查询
    """
    def run(param):
        puid = param['puid']
        log_date = param['log_date'] if param['log_date'] else datetime.datetime.now().strftime('%Y.%m.%d')
        count = param['count'] if param['count'] else 50
        is_page = param['is_page']
    
        if not is_page:
            query_data(log_date, puid, count)
        else:
            page_count = param['page_count']
            page_num = param['page_num']
            query_data_by_page(log_date, puid, page_count, page_num)
    
    def main(argv):
        try:
            opts, args = getopt.getopt(argv[1:], 'hp:l:c:io:n:',
                                       ['help', 'puid=', 'log_date=', 'count=', 'is_page', 'page_count=', 'page_num='])
        except getopt.GetoptError as err:
            print str(err)
            sys.exit(2)
    
        if not opts:
            print "The puid is a must !"
            opts = [('-h', '')]
    
        VARS = {'puid': None, 'log_date': None, 'count': None,'is_page': False, 'page_count': 50, 'page_num': 1}
    
        for opt, value in opts:
    
            if opt in ('-h', '--help'):
                print("")
                print("Usage:python query_client_log.py -p puid [-c count -l log_date -i [-o page_count -n page_count]] | --puid=puid ....")
                print("-p, --puid           用户id")
                print("-l, --log_date       数据日期,格式:yyyy.mm.dd")
                print("-c, --count          查询数据的条数,默认50条")
                print("-i, --is_page        用于标记是否分页, 默认不分页")
                print("-o, --page_count     分页查询,每页数据的条数,默认每页50条")
                print("-n, --page_num       分页查询,当选查询的页号,默认从第1页开始查询")
                print("-h, --help           查看帮助并退出")
                print("")
                sys.exit()
    
            if opt in ('-p', '--puid'):
                VARS['puid'] = value
            elif opt in ('-l', '--log_date'):
                VARS['log_date'] = value
            elif opt in ('-c', '--count'):
                VARS['count'] = value
            elif opt in ('-i', '--is_page'):
                VARS['is_page'] = True
            elif opt in ('-o', '--page_count'):
                VARS['page_count'] = value
            elif opt in ('-n', '--page_num'):
                VARS['page_num'] = value
    
        run(VARS)
    
    
    if __name__ == '__main__':
        main(sys.argv)
    
    
    参考
    1. https://www.cnblogs.com/xiao987334176/p/10130712.html
    2. https://www.cnblogs.com/shaosks/p/7592229.html
    3. https://blog.csdn.net/u011587401/article/details/77476858
    4. https://www.cnblogs.com/Dev0ps/p/9493576.html
    Souviens Toi Que Tu Vas Mourir !
  • 相关阅读:
    excel提取一类具有相似结构的部分数据,2种方式;数据——分列——分割符号/固定宽度;
    excel文字随单元格大小变化
    python操作excel
    Docker容器使用
    阿里云服务器部署好后,浏览器远程访问,提示无法访问此网站;
    StringBuffer和StringBuilder的区别
    【Linux运维-集群技术进阶】集群/分布式环境下5种session处理策略
    mysql如何进行以,分割的字符串的拆分
    Dubbox的介绍和简单示例
    JAVA回调机制(CallBack)详解
  • 原文地址:https://www.cnblogs.com/ExMan/p/11324003.html
Copyright © 2011-2022 走看看