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
  • 相关阅读:
    破衣服的回忆
    underscorejs 源码走读笔记
    关于书籍《区块链以太坊DApp开发实战》的内容告示
    从区块链技术研发者的角度,说说我的区块链从业经历和对它的理解
    简介 以太坊 2.0 核心 之 共识机制的改变
    一般电商应用的订单队列架构思想
    详细讲解:零知识证明 之 ZCash 完整的匿名交易流程
    HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的
    由 System.arraycopy 引发的巩固:对象引用 与 对象 的区别
    如何独立开发一个网络请求框架
  • 原文地址:https://www.cnblogs.com/remainsu/p/python-lian-jie-elasticsearch-cha-xun-shu-ju-zhi-c.html
Copyright © 2011-2022 走看看