zoukankan      html  css  js  c++  java
  • python查询elasticsearch(Query DSL) 实例

    import datetime
    import sys
    import getopt
    import hashlib
    from elasticsearch import Elasticsearch
    
    """
    初始化elasticsearch连接
    """
    def init_es():
        return Elasticsearch(["localhost:9200"])
    
    """
    查询数据, 支持分页
    """
    def query_data(log_date, puid, data_rows, page_num):
        es = init_es()
        body = {
            "query":{
                "term":{
                    "puid":""
                }
            },
            "sort":[{
                "datatime":{
                    "order":"asc"
                }
            },{
                "@timestamp":{
                    "order":"asc"
                }
            }],
            "size":"",
            "from":""
        }
        index_name = "test-"+log_date
        body["query"]["term"]["puid"] = run_md5(str(puid))
        body["size"] = data_rows
        from_page = int(data_rows) * (int(page_num)-1)
        body["from"] = from_page
        data_array = es.search(index=index_name, doc_type='doc', body=body)
    
        print_data(data_array, data_rows)
    
    """
    打印数据
    """
    def print_data(data_array, data_rows):
    
        datas = data_array["hits"]["hits"]
        #print datas
        print "符合条件的数据总条数为:" + str(data_array['hits']['total'])
        print "当前显示的数据如下:"
        for data in datas:
            result = data['_source']['message']
            print result.strip(result.split("	")[0]).strip("	")
    
    """
    md5加密
    """
    def run_md5(puid):
    
        md = hashlib.md5()
        md.update(puid.encode('utf-8'))
        return md.hexdigest()
    
    """
    处理逻辑调用查询
    """
    def run(param):
        puid = param['puid']
        log_date = param['log_date'] if param['log_date'] else datetime.datetime.now().strftime('%Y-%m-%d')
        data_rows = param['data_rows']
        page_num = param['page_num']
    
        query_data(log_date, puid, data_rows, page_num)
    
    def main(argv):
        try:
            opts, args = getopt.getopt(argv[1:], 'hp:d:r:n:', ['help', 'puid=', 'log_date=', 'data_rows=', '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, 'data_rows': 50, 'page_num': 1}
    
        for opt, value in opts:
    
            if opt in ('-h', '--help'):
                print("")
                print("Usage:python query_client_log.py -p puid [-r data_rows -d log_date [-n page_num]] | --puid=puid ....")
                print("-p, --puid           用户id,此为必传参数")
                print("-d, --log_date       数据日期,格式:yyyy-mm-dd")
                print("-r, --data_rows      查询数据的条数,如为分页查询则为每页数据的条数,默认50条")
                print("-n, --page_num       分页查询,当前查询的页号,默认不分页")
                print("-h, --help           查看帮助并退出")
                print("")
                sys.exit()
    
            if opt in ('-p', '--puid'):
                VARS['puid'] = value
            elif opt in ('-d', '--log_date'):
                VARS['log_date'] = value
            elif opt in ('-r', '--data_rows'):
                VARS['data_rows'] = value
            elif opt in ('-n', '--page_num'):
                VARS['page_num'] = value
    
        run(VARS)
    
    if __name__ == '__main__':
        main(sys.argv)
    
  • 相关阅读:
    1046 Shortest Distance (20 分)(模拟)
    1004. Counting Leaves (30)PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
    1041 Be Unique (20 分)(hash散列)
    1036 Boys vs Girls (25 分)(查找元素)
    1035 Password (20 分)(字符串处理)
    1044 Shopping in Mars (25 分)(二分查找)
    onenote使用小Tip总结^_^(不断更新中...)
    1048 Find Coins (25 分)(hash)
    三个故事
    领导者的举止
  • 原文地址:https://www.cnblogs.com/remainsu/p/python-cha-xunelasticsearchquery-dsl-shi-li.html
Copyright © 2011-2022 走看看