• elasticsearch_dsl 操作


    import elasticsearch
    from elasticsearch_dsl import Search, MultiSearch # Search-执行一个搜索,MultiSearch-同时执行多个搜索
    from elasticsearch_dsl import Q
    
    class settings():
        es_host = "192.168.8.190"
        port = 9200
        timeout = 15000
        index = ['pylog-view-*',]
        #index = ['pylog-view-2020.12.07','pylog-view-2020.12.08']
    
    
    
    es = elasticsearch.Elasticsearch([{'host': settings.es_host, 'port': settings.port}])
    # size 指定个数, from_ 指定起始位置,filter_path 可以指定显示的数据
    
    
    
    s = Search(using=es, index=settings.index)
    
    
    # 查询
    # s = s.query("match", browser = "小米浏览器"})
    # s = s.query("match", ** {"browser": "小米浏览器"})
    # s = s.query("match", browser__keyword = "小米浏览器"})
    
    # , Q("term", browser = "华为浏览器")
    
    # q = Q('bool', should=[Q('term', **{"browser.keyword": "小米浏览器"})])
    
    # q = Q('bool', should=[Q('term', **{"browser.keyword": "小米浏览器"}), Q('term', **{"browser.keyword": "华为浏览器"})])
    
    # q = Q('bool', should=[Q('term', browser__keyword = "小米浏览器")])
    
    # s = s.query(q)
    
    # s = s.filter("term", browser__keyword =  "小米浏览器")
    
    # s = s.query("match", browser__keyword =  "小米浏览器")
    
    
    # s = s.exclude('terms', browser__keyword=['华为浏览器', "小米浏览器", 'pc', '谷歌浏览器', '谷歌爬虫', '百度app', 'Safari浏览器'])
    
    # 分页切片
    #s = s[1:3]
    
    
    
    
    # print(s.count())
    
    #  模糊匹配
    
    """
    1.使用Wildcard Query的通配符进行查询
    前提是查询的字段类型是string类型,对应ES中的text,keyword(这种查询方式会慢,查询不进行分词处理)
    {
      "query": {
        "wildcard": {
          "msg.keyword": "*爱学*"
        }
      }
    }
    
    2.match_phrase
    match_phrase查询首先解析查询字符串来产生一个词条列表。
    然后会搜索所有的词条,但只保留包含了所有搜索词条的文档,并且词条的位置要邻接
    """
    #s.query("match", browser="华为浏览器").aggs.bucket("browser", "terms", field="browser.keyword").metric("count_browser", "stats", field="browser.")
    
    #s.query("match", browser="华为浏览器").aggs.bucket("pageurl", "terms", field="pageurl.keyword").bucket('browser', 'terms', field='browser.keyword')
    
    #s.aggs.bucket("pageurl", "terms", field="pageurl.keyword", size=2).metric("sum_pageurl", "stats", field="pageurl.").bucket('browser', 'terms', field='browser.keyword')
    
    # _count 按照数字排,_key 按照字母排序
    # s.aggs.bucket("pageurl", "terms", field="pageurl.keyword", order={"_count": "asc"}, size=3).bucket('browser', 'terms', field='browser.keyword')
    
    # for hit in s.scan():
    #     print(hit)
    
    
    s = s.source(include=[""])
    
    # 按照行业统计流量
    s.aggs.bucket("industry", "terms", field="industry.keyword").bucket('rsdate', 'terms', field='rsdate')
    
    # 添加参数
    s = s.params(track_total_hits=True)
    # 明确包含/排除字段  include=["browser"], exclude=["p.*"] 可以正则
    
    # 执行
    # print(s)
    s = s.execute()
    # 数据呈现
    res = s.to_dict()
    
    # for item in s.scan():
    #     print(item.browser)
    
    
    
    
    #print(res)
    
    with open('s.txt', 'w', encoding='utf-8') as f:
        f.write(str(res))
  • 相关阅读:
    如何添加动画效果
    iQuery高版本不兼容旋转木马插件问题
    splice方法可以实现增删改功能
    swiper.js实现轮播图效果
    MySQL | 操作表数据
    MySQL | 高级查询
    MySQL | 基本查询
    MySQL | 表函数
    MySQL | 表约束
    MySQL | 操作表
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/14115128.html
Copyright © 2020-2023  润新知