python中的elasticsearch_dsl查询语句转换成es查询语句详解

 更新时间:2023年07月25日 09:50:39   作者:IT之一小佬  
这篇文章主要介绍了python中的elasticsearch_dsl查询语句转换成es查询语句详解,ElasticSearch在实际生产里通常和LogStash,Kibana,FileBeat一起构成Elastic Stack来使用,它是这些组件里面最核心的一个,需要的朋友可以参考下

elasticsearch_dsl查询语句转换成es语句

使用代码运行效果来演示转换结果。

示例代码1: 

from elasticsearch_dsl import connections, Search, Q
es = connections.create_connection(hosts=["192.168.104.49:9200"], timeout=20)
# print(es)
res = Search(using=es, index="test_index").query().query()  # 当调用.query()方法多次时,内部会使用&操作符
print(res.to_dict())

运行结果:

示例代码2:

from elasticsearch_dsl import connections, Search, Q
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = ~Q("match", title="python")
res = Search(using=es, index="test_index").query(q)
print(res.to_dict())

运行结果:

示例代码3:

from elasticsearch_dsl import connections, Search, Q
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q('match', name='张') & Q("match", name="北")
res = Search(using=es, index="test_index").query(q)
print(res.to_dict())

运行结果:

示例代码4:

from elasticsearch_dsl import connections, Search, Q
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q("bool", must=[Q("match", address="山")], should=[Q("match", gender="男"), Q("match", emplyer="AAA")], minimum_should_match=1)
res = Search(using=es, index="test_index").query(q)
print(res.to_dict())

运行结果:

示例代码5:  【分页】

from elasticsearch_dsl import connections, Search, Q
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q("bool", must=[Q("match", address="山")], should=[Q("match", gender="男"), Q("match", emplyer="AAA")], minimum_should_match=1)
res = Search(using=es, index="test_index").query(q)[2: 5]
print(res.to_dict())

运行结果:

示例代码6:   【聚合】

from elasticsearch_dsl import connections, Search, Q, A
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q("match", sex='男')
a = A("terms", field="gender")
res = Search(using=es, index="test_index").query(q)
res.aggs.bucket("gender_terms", a)
print(res.to_dict())

运行结果:

示例代码7:  【聚合】

from elasticsearch_dsl import connections, Search, Q, A
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q("match", sex='男')
res = Search(using=es, index="test_index").query(q)
res.aggs.bucket("per_gender", "terms", field="gender")
res.aggs["per_gender"].metric("sum_age", "sum", field="age")
res.aggs["per_gender"].bucket("terms_balance", "terms", field="balance")
res.aggs["per_gender"].bucket("terms_balance2", "terms", field="balance2")
print(res.to_dict())

运行结果:

示例代码8:  【聚合内置排序】

from elasticsearch_dsl import connections, Search, Q, A
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q("match", sex='男')
res = Search(using=es, index="test_index").query(q)
res.aggs.bucket("agg_age", "terms", field="age", order={"_count": "desc"})
print(res.to_dict())

运行结果:

示例代码9:

from elasticsearch_dsl import connections, Search, Q, A
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q("match", sex='男')
res = Search(using=es, index="test_index").query(q)
res.aggs.bucket("agg_age", "terms", field="age", order={"_count": "asc"}).metric("avg_age", "avg", field="age")
print(res.to_dict())

运行结果:

示例代码10:  【_source字段】

from elasticsearch_dsl import connections, Search, Q, A
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
q = Q("match", sex='男')
res = Search(using=es, index="test_index").query(q).source(['account_number', 'address'])
print(res.to_dict())

运行结果:

示例代码11:

from elasticsearch_dsl import connections, Search, Q
# 连接es
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
s = Search(using=es, index="account_info")
# 方式一:
# 省份为北京
q1 = Q("match", province="北京")
# 25或30岁的男性信息
q2 = Q("bool", must=[Q("terms", age=[25, 30]), Q("term", gender="男")])
# and
q = q1 & q2
res = s.query(q)
print(res.to_dict())
# for data in res:
#     print(data.to_dict())
print("共查到%d条数据" % res.count())
print("*" * 100)
# 方式二
# 省份为北京
q1 = Q("match", province="北京")
# 25或30岁的信息
# q2 = Q("bool", must=[Q("terms", age=[25, 30]), Q("term", gender="男")])
q2 = Q("term", age=25) | Q("term", age=30)
# 男性
q3 = Q("term", gender="男")
res = s.query(q1).query(q2).query(q3)  # 多次query就是& ==> and 操作
print(res.to_dict())
# for data in res:
#     print(data.to_dict())
print("共查到%d条数据" % res.count())

运行结果:

示例代码12:

from elasticsearch_dsl import connections, Search, Q, A
# 连接es
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
s = Search(using=es, index="account_info")
s.query()
q = A("terms", field="age", size=100).metric("age_per_balance", "avg", field="balance")
s.aggs.bucket("res", q)
print(s.to_dict())

运行结果:

示例代码13:  【多次嵌套聚合】

from elasticsearch_dsl import connections, Search, Q, A
# 连接es
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
s = Search(using=es, index="account_info")
a1 = A("range", field="age", ranges={"from": 25, "to": 28})
a2 = A("terms", field="gender")
a3 = A("avg", field="balance")
s.aggs.bucket("res", a1).bucket("gender_group", a2).metric("balance_avg", a3)
print(s.to_dict())

运行结果:

示例代码14:  【使用pycharm打断点查看查询语句】

from elasticsearch_dsl import connections, Search, Q, A
# 连接es
es = connections.create_connection(hosts=["192.168.124.49:9200"], timeout=20)
# print(es)
s = Search(using=es, index="account_info")
a1 = A("range", field="age", ranges={"from": 25, "to": 28})
a2 = A("terms", field="gender")
a3 = A("avg", field="balance")
s.aggs.bucket("res", a1).bucket("gender_group", a2).metric("balance_avg", a3)
# print(s.to_dict())
# 执行并拿到返回值
response = s.execute()
# res是bucket指定的名字
for data in response.aggregations.res:
    print(data.to_dict())

运行结果:

注意:即使数据库中没有数据,也可以打印出查询语句!

到此这篇关于python中的elasticsearch_dsl查询语句转换成es查询语句详解的文章就介绍到这了,更多相关python的elasticsearch_dsl转换es内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pycharm开发一个简单界面和通用mvc模板(操作方法图解)

    pycharm开发一个简单界面和通用mvc模板(操作方法图解)

    这篇文章主要介绍了pycharm开发最简单的界面和通用mvc模板的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • python实现贪吃蛇游戏源码

    python实现贪吃蛇游戏源码

    这篇文章主要为大家详细介绍了python实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • python绘制y关于x的线性回归线性方程图像实例

    python绘制y关于x的线性回归线性方程图像实例

    这篇文章主要为大家介绍了python绘制y关于x的线性回归线性方程图像实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 用python做游戏的细节详解

    用python做游戏的细节详解

    在本篇内容里小编给大家分享的是关于python做游戏的细节相关知识点内容,有需要的朋友们跟着学习下。
    2019-06-06
  • django虚拟环境(virtualenv)的创建

    django虚拟环境(virtualenv)的创建

    在使用django开发项目的时候,一个环境只能对应一个项目,若不安装虚拟环境、都装在系统里面,每次项目加载都需要加载所有的安装包,本文就介绍django虚拟环境的安装,感兴趣的可以了解一下
    2021-08-08
  • Python中的HTTP请求库Requests的具体使用

    Python中的HTTP请求库Requests的具体使用

    Python作为一种功能强大且易于学习的编程语言,提供了许多用于处理HTTP请求的库,其中,Requests库是最受欢迎的选择之一,本文主要介绍了Python中的HTTP请求库Requests的具体使用,感兴趣的可以了解一下
    2023-12-12
  • Python yield 使用浅析

    Python yield 使用浅析

    这篇文章主要介绍了Python yield 使用浅析,本文给出了多个使用实例来分析yield的使用方法,需要的朋友可以参考下
    2015-05-05
  • python3实现tailf命令的示例代码

    python3实现tailf命令的示例代码

    本文主要介绍了python3实现tailf命令的示例代码,tail -f 是一个linux的操作命令.其主要的是会把文件里的最尾部的内容显显示在屏幕上,并且不断刷新,只要文件有变动就可以看到最新的文件内容,感兴趣的可以了解一下
    2023-11-11
  • 使用python删除nginx缓存文件示例(python文件操作)

    使用python删除nginx缓存文件示例(python文件操作)

    这篇文章主要介绍了使用python删除nginx缓存文件示例(python文件操作),需要的朋友可以参考下
    2014-03-03
  • Python OpenCV实现基本图形绘制

    Python OpenCV实现基本图形绘制

    这篇文章主要介绍了Python OpenCV实现基本图形绘制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论