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))
原文地址:https://www.cnblogs.com/xiao-xue-di/p/14115128.html