es查询与聚合
"""
官方文档: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查询与聚合的更多相关文章
- es查询,聚合、平均值、值范围、cardinality去重查询
原文:https://blog.csdn.net/sxf_123456/article/details/78195829 普通查询 GET ana-apk/_search { "query& ...
- ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询
ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...
- Elasticsearch(8) --- 聚合查询(Metric聚合)
Elasticsearch(8) --- 聚合查询(Metric聚合) 在Mysql中,我们可以获取一组数据的 最大值(Max).最小值(Min).同样我们能够对这组数据进行 分组(Group).那么 ...
- Elasticsearch(9) --- 聚合查询(Bucket聚合)
Elasticsearch(9) --- 聚合查询(Bucket聚合) 上一篇讲了Elasticsearch聚合查询中的Metric聚合:Elasticsearch(8) --- 聚合查询(Metri ...
- Es查询工具使用
Kibana按照索引过滤数据 1.创建索引模式 2.查询索引中的数据 Es查询不返回数据 创建索引的时候指定mapping mappings={ "mappings": { &qu ...
- ES查询语句
记录常用的es 查询 聚合 GET _cat / indices GET / p_ext_develop / _mapping / g GET / p_ext_develop / _analyze { ...
- ElasticSearch的高级复杂查询:非聚合查询和聚合查询
一.非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程) 查询条件QueryBuilder的构建方法 1.1 精确查询(必须完全匹配上,相当于SQL语句中的“=”) ① 单个匹配 termQuery ...
- java查询elasticsearch聚合
java查es多分组聚合: SearchRequestBuilder requestBuilderOfLastMonth = transportClient.prepareSearch(TYPE_NA ...
- Elasticsearch使用系列-基本查询和聚合查询+sql插件
Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...
随机推荐
- eclipse 关闭validating
1.起因 validating XXX 总是非常的浪费时间,有时候还会造成程序卡死 2.解决 windows - Perferences - Validation build 全部去掉
- APP功能性测试-3
定义:兼容测试就是指软件在特定的硬件平台,不同的应用软件之间,不同的操作系统平台上,不同的网络等环境中是否能够正常的运行的测试 (会不会产生不兼容) 兼容性测试的作用 进一步提高产品质量 和其他软件 ...
- P2384洛谷 最短路
题目描述 给定n个点的带权有向图,求从1到n的路径中边权之积最小的简单路径. 输入输出格式 输入格式: 第一行读入两个整数n,m,表示共n个点m条边. 接下来m行,每行三个正整数x,y,z,表示点x到 ...
- hbase1.2.6完全分布式安装
环境,参考之前的两篇博文: jdk1.7 hadoop2.6.0 完全分布式 一个master,slave1,slave2,slave3 zookeeper3.4.6 完全分布式 安装与配置:(以下步 ...
- lintcode-101-删除排序数组中的重复数字 II
101-删除排序数组中的重复数字 II 跟进"删除重复数字": 如果可以允许出现两次重复将如何处理? 样例 标签 数组 两根指针 脸书 思路 参照上一篇博客lintcode-100 ...
- 《Effective STL》学习笔记
http://www.cnblogs.com/arthurliu/archive/2011/08/07/2108386.html 作者:咆哮的马甲 出处:http://www.cnblogs.com/ ...
- 【题解】JSOI2010满汉全席
~bzoj1823 第一次接触2-SAT——SAT,即适定性(Satisfiability)的缩写.像名称所说,即满足需求的可能性问题,而k-SAT即每个人有k种需求,已经证明k>2时是一个NP ...
- 【算法】高斯消元&线性代数
寒假作业~就把文章和题解3道题的代码扔在这里啦——链接: https://pan.baidu.com/s/1kWkGnxd 密码: bhh9 1.HNOI2013游走 #include <bit ...
- 12.25模拟赛T2
https://www.luogu.org/blog/a23333/post-xing-xuan-mu-ni-sai-path-ji-wang-zui-duan-lu 如果设f[i]表示从i到n的期望 ...
- 几个JavaScript的浏览器差异处理问题
JQuery确实是个很好用的库,你可以不用考虑很多细节方面的事情.但很作为一个web前端,处理和了解浏览器差异一个重要问题.下面将介绍一些总结,先介绍没有使用js库的情况. 1. setAttribu ...