python中的elasticsearch_dsl查詢語句轉(zhuǎn)換成es查詢語句詳解
elasticsearch_dsl查詢語句轉(zhuǎn)換成es語句
使用代碼運行效果來演示轉(zhuǎn)換結(jié)果。
示例代碼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() # 當(dāng)調(diào)用.query()方法多次時,內(nèi)部會使用&操作符 print(res.to_dict())
運行結(jié)果:

示例代碼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())運行結(jié)果:

示例代碼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())運行結(jié)果:

示例代碼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())運行結(jié)果:

示例代碼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())運行結(jié)果:

示例代碼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())運行結(jié)果:

示例代碼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())運行結(jié)果:


示例代碼8: 【聚合內(nèi)置排序】
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())運行結(jié)果:


示例代碼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())運行結(jié)果:


示例代碼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())運行結(jié)果:


示例代碼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條數(shù)據(jù)" % 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條數(shù)據(jù)" % res.count())運行結(jié)果:



示例代碼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())運行結(jié)果:


示例代碼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())運行結(jié)果:


示例代碼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())
# 執(zhí)行并拿到返回值
response = s.execute()
# res是bucket指定的名字
for data in response.aggregations.res:
print(data.to_dict())運行結(jié)果:







注意:即使數(shù)據(jù)庫中沒有數(shù)據(jù),也可以打印出查詢語句!
到此這篇關(guān)于python中的elasticsearch_dsl查詢語句轉(zhuǎn)換成es查詢語句詳解的文章就介紹到這了,更多相關(guān)python的elasticsearch_dsl轉(zhuǎn)換es內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實戰(zhàn)之Elasticsearch的高級實現(xiàn)詳解
- python中elasticsearch_dsl模塊的使用方法
- python 使用elasticsearch 實現(xiàn)翻頁的三種方式
- Python操作Elasticsearch處理timeout超時
- python3實現(xiàn)elasticsearch批量更新數(shù)據(jù)
- python更新數(shù)據(jù)庫中某個字段的數(shù)據(jù)(方法詳解)
- Python更新數(shù)據(jù)庫腳本兩種方法及對比介紹
- Python調(diào)用Elasticsearch更新數(shù)據(jù)庫的操作方法
相關(guān)文章
使用Python將xmind腦圖轉(zhuǎn)成excel用例的實現(xiàn)代碼(一)
這篇文章主要介紹了使用Python將xmind腦圖轉(zhuǎn)成excel用例的實現(xiàn)代碼(一),本文給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
python面向?qū)ο蠖嗑€程爬蟲爬取搜狐頁面的實例代碼
這篇文章主要介紹了python面向?qū)ο蠖嗑€程爬蟲爬取搜狐頁面的實例代碼,需要的朋友可以參考下2018-05-05
Python開發(fā)SQLite3數(shù)據(jù)庫相關(guān)操作詳解【連接,查詢,插入,更新,刪除,關(guān)閉等】
這篇文章主要介紹了Python開發(fā)SQLite3數(shù)據(jù)庫相關(guān)操作,結(jié)合實例形式較為詳細(xì)的分析了Python操作SQLite3數(shù)據(jù)庫的連接,查詢,插入,更新,刪除,關(guān)閉等相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
es+flask搜索小項目實現(xiàn)分頁+高亮的示例代碼
本文主要介紹了es+flask搜索小項目實現(xiàn)分頁+高亮的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01

