"""
官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/aggregations.html
官方文档:https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html
参考:https://blog.csdn.net/hanyuyang19940104/article/details/81668880中的bug解决方案 可参考:https://blog.csdn.net/junfeng666/article/details/78251788
可参考: https://linux.ctolib.com/elasticsearch-dsl-py.html
"""
# metric的方法有sum、avg、max、min, value_count等等
import time
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q, A
from elasticsearch.helpers import bulk
import requests
import json es = Elasticsearch(['localhost'], port=9200)
dict_1 = {"name": "test", "ac": "bob", "address": {"city":"shanghai"}}
dict_2 = [
{"name":'bob', "age":100, "ac":"sssssss"},
{"name":'marry', "age":110, "ac":"i am marry"},
{"name":'lili', "age":155, "ac":"helloworld"},
] def get_data_by_id():
return es.get(index="bank", doc_type="account", id='qwe') def query_data():
res = es.search(index="bank", doc_type="account")
return res def index_data():
return es.index(index="bank", doc_type="account", body=dict_1) def bulk_data(data=None):
if not data:
data = dict_2
actions = []
# '_op_type':'index',#操作 index update create delete
for i in data:
action = {
'_op_type': 'index', # 操作 index update create delete
# '_index': "bank",
'_index': "cars",
"_type": "transactions",
# "_type": "account",
"_source": i }
actions.append(action)
success, _ = bulk(es, actions=actions, raise_on_error=True)
return success def Q_func():
# 官方文档:https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html
# q = Q("multi_match", query="bob", fields=["name", 'ac'])
s = Search(using=es, index="bank")
# Q("match", title='python') & Q("match", title='django')
s.query = Q('bool', must=[Q('match', name='bob'), Q('match', ac='bob')]) # name=bob且ac=bob
# s.query = Q('bool', must=[Q('match', name='bob')])
res_3 = s.query().execute()
print(res_3)
print(len(res_3))
# <Response: [<Hit(bank/account/a_AJWGYB6B4UEZt2YIRu): {'name': 'marry', 'age': 10, 'ac': 'i am marry'}> def q_search():
# .source(["address"])可以指定返回字段
s = Search(using=es, index="bank")
# s = s.filter('term', category__keyword='Python')
s = s.query('match', address__city='shanghai') # 查二级数据
# data为dict_1 = {"name": "test", "ac": "bob", "address": {"city":"shanghai"}}
res = s.execute()
print(res) # 聚合: def A_func():
s = Search(using=es, index="bank")
# a = A('terms', field='name')
# s.aggs.bucket("term_name", "terms", field='name')
# res =a.metric('clicks_per_category', 'sum', field='clicks') \
# .bucket('tags_per_category', 'terms', field='tags') s.aggs.bucket('sum_age', 'match', field='name') \
.metric("max_age", "sum", script="doc['downFlux'].value+doc['upFlux'].value")
# .metric("max_age", "sum", field='age')
# s.aggs.bucket('sum_age', 'terms', field='name') # 参数为group_name, 方法, 栏
# s.aggs.metric('max_age', 'max', field='age') # s.aggs.bucket('per_name', 'terms', field='name') \
# .metric('max_age', 'max', field='age') res = s.execute()
for i in res:
print(i)
print(len(res))
# a = {'terms': {'field': 'name'}}
# {
# 'terms': {'field': 'category'},
# 'aggs': {
# 'clicks_per_category': {'sum': {'field': 'clicks'}},
# 'tags_per_category': {'terms': {'field': 'tags'}}
# }
# } # index_data()
# q_search()
# A_func()
# print(bulk_data()) def curl_es():
data = [
{"price": 10000, "color": "red", "make": "honda", "sold": "2014-10-28"},
{"price": 20000, "color": "red", "make": "honda", "sold": "2014-11-05"},
{"price": 30000, "color": "green", "make": "ford", "sold": "2014-05-18"},
{"price": 15000, "color": "blue", "make": "toyota", "sold": "2014-07-02"},
{"price": 12000, "color": "green", "make": "toyota", "sold": "2014-08-19"},
{"price": 20000, "color": "red", "make": "honda", "sold": "2014-11-05"},
{"price": 80000, "color": "red", "make": "bmw", "sold": "2014-01-01"},
{"price": 25000, "color": "blue", "make": "ford", "sold": "2014-02-12"},
]
body = {
"size": 0,
"aggs": {
"popular_colors": {
"terms": {
"field": "color.keyword"
}
}
}
}
res = es.search(index="cars", doc_type="transactions", body=body)
print(res)
# for key, i in res:
# print(key, i) def agg_es():
#
# s = Search(using=es, index="cars", doc_type='transactions').extra(size=0) ### 注意这里size=0可加快查询速度
s = Search(using=es, index="cars", doc_type='transactions')
# metric的方法有sum、avg、max、min, value_count等等
# bucket的size参数只返回1个bucket桶
# 加上size=1000返回的数据不会只有10条
s.aggs.bucket('test', 'terms', field='color.keyword',size=1000).metric("sum_test", 'count', field='make.keyword')
# metric("max_age", "sum", script="doc['downFlux'].value+doc['upFlux'].value")
print(s.to_dict(),'\n')
res = s.execute()
print(res)
print(res.aggregations)
print(res.to_dict())
'''
{'_index': 'cars', '_type': 'transactions', '_id': 'fPDTW2YB6B4UEZt2CYQ_', '_score': 1.0,
'_source': {'price': 20000, 'color': 'red', 'make': 'honda', 'sold': '2014-11-05'}}]}, 'aggregations': {
'test': {'doc_count_error_upper_bound': 0, 'sum_other_doc_count': 0,
'buckets': [{'key': 'red', 'doc_count': 4, 'sum_test': {'value': 130000.0}},
{'key': 'blue', 'doc_count': 2, 'sum_test': {'value': 40000.0}},
{'key': 'green', 'doc_count': 2, 'sum_test': {'value': 42000.0}}]}}}
''' if __name__ == "__main__":
agg_es() # doc_count:查询出的记录条数,与聚合后的buckets的list 长度不同

es查询与聚合的更多相关文章

  1. es查询,聚合、平均值、值范围、cardinality去重查询

    原文:https://blog.csdn.net/sxf_123456/article/details/78195829 普通查询 GET ana-apk/_search { "query& ...

  2. ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

    ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...

  3. Elasticsearch(8) --- 聚合查询(Metric聚合)

    Elasticsearch(8) --- 聚合查询(Metric聚合) 在Mysql中,我们可以获取一组数据的 最大值(Max).最小值(Min).同样我们能够对这组数据进行 分组(Group).那么 ...

  4. Elasticsearch(9) --- 聚合查询(Bucket聚合)

    Elasticsearch(9) --- 聚合查询(Bucket聚合) 上一篇讲了Elasticsearch聚合查询中的Metric聚合:Elasticsearch(8) --- 聚合查询(Metri ...

  5. Es查询工具使用

    Kibana按照索引过滤数据 1.创建索引模式 2.查询索引中的数据 Es查询不返回数据 创建索引的时候指定mapping mappings={ "mappings": { &qu ...

  6. ES查询语句

    记录常用的es 查询 聚合 GET _cat / indices GET / p_ext_develop / _mapping / g GET / p_ext_develop / _analyze { ...

  7. ElasticSearch的高级复杂查询:非聚合查询和聚合查询

    一.非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程) 查询条件QueryBuilder的构建方法 1.1 精确查询(必须完全匹配上,相当于SQL语句中的“=”) ① 单个匹配 termQuery ...

  8. java查询elasticsearch聚合

    java查es多分组聚合: SearchRequestBuilder requestBuilderOfLastMonth = transportClient.prepareSearch(TYPE_NA ...

  9. Elasticsearch使用系列-基本查询和聚合查询+sql插件

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...

随机推荐

  1. 让webapi支持CORS,可以跨域访问

    1.在NuGet里搜索webapi找到下面的扩展,添加进项目里. 2.在Global.asax中添加一行代码 protected void Application_Start() { //添加CORS ...

  2. Linux系统学习笔记(1)

    学习地址:http://www.runoob.com/linux/linux-tutorial.html 1.学习Windows和Linux哪个比较难? 前期是Windows容易学习,后期是Linux ...

  3. Qt Charts实践

    Qt Charts的横空出世标志着QWT,QCustomPlot .....时代的终结,让我们开始使用QtCharts吧 在Qt 5.7.0中已经集成了Qt Charts模块,需要在安装Qt的时候把C ...

  4. SpriteKit游戏开发适配iPad/iPhone6/7/8/Plus及iPhoneX的尺寸及安全区域

    未适配前:Ball球超过屏幕的上下方   适配后:Ball球就在屏幕的可视范围内运动了 一.那么如何适配不同的iPhone.iPhoneX及iPad的屏幕尺寸呢? 我们开发一个App的时候, 通常希望 ...

  5. 【Swift】日期比较函数 记录下 Comparing date in Swift

    Add this code to your project and comparing dates is easier than ever 扩展NSDATE //swift 3.0.2 extensi ...

  6. 1030 Travel Plan (30 分)(最短路径 and dfs)

    #include<bits/stdc++.h> using namespace std; ; const int inf=0x3f3f3f3f; int mp[N][N]; bool vi ...

  7. 测试理论-selenium的工作原理

  8. edgeboxes proposal 和dpm 连接

    经过多天阅读文献和代码,我对edgeboxes 和 dpm的有了一定了解. 现在决定把它们简单地连接起来 也就是edgeboxes proposal 推荐窗口 然后 dpm去判断 但按照我理解的DPM ...

  9. nopcommerce商城系统--安装nopCommerce

    原址:http://www.nopcommerce.com/docs/79/installing-nopcommerce.aspx .NET Framework 4.5.1下载:http://www. ...

  10. Java面试题(下)

    这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题, ...