python中elasticsearch_dsl模块用法详解

本文详细介绍了在Python环境下,利用elasticsearch_dsl模块与elasticsearch进行交互,包括安装、连接、Search对象的使用、query和filter方法、index与using方法、嵌套类型查询以及具体案例分析,帮助理解如何高效地执行Elasticsearch查询。
摘要由CSDN通过智能技术生成

elasticsearch-dsl是基于elasticsearch-py封装实现的,提供了更简便的操作elasticsearch的方法。

安装:

install elasticsearch_ds

 

连接elasticsearch

from elasticsearch_dsl import connections, Search

es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
print(es)

还可以通过alias给连接设置别名,后续可以通过别名来引用该连接,默认别名为default。

from elasticsearch_dsl import connections, Search

# 方式一:连接es
es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
print(es)

# 方式二:连接es
connections.create_connection(alias="my_new_connection", hosts=["127.0.0.1:9200"], timeout=20)

elasticsearch_dsl.Search

search对象代表整个搜索请求,包括:queries、filters、aggregations、sort、pagination、additional parameters、associated client。

API被设置为可链接的即和用.连续操作。search对象是不可变的,除了聚合,对对象的所有更改都将导致创建包含该更改的浅表副本。

当初始化Search对象时,传递elasticsearch客户端作为using的参数

示例代码1:

from elasticsearch_dsl import connections, Search

# 方式一:连接es
es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
# print(es)

# 方式二:连接es
connections.create_connection(alias="my_new_connection", hosts=["127.0.0.1:9200"], timeout=20)

# 不使用别名使用
res = Search(using=es).index("test_index").query()
# print(res)
for data in res:
    print(data.to_dict())

print("*" * 100)

# 使用别名后这样使用
res2 = Search(using="my_new_connection").index('test_index').query()
# print(e)
for data in res2:
    print(data.to_dict())

运行结果

 

示例代码2:

from elasticsearch_dsl import connections, Search

# 方式一:连接es
es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
# print(es)

# 不使用别名使用
res = Search(using=es).index("test_index").query()
# print(res)
for data in res:
    print(data.to_dict())

print("*" * 100)

# 书写方式一:按条件查询数据
res2 = Search(using=es).index("test_index").query("match", name="张三")  # 查询时注意分词器的使用
for data in res2:
    print(data.to_dict())

print("*" * 100)

# 书写方式二:按条件查询数据
res3 = Search(using=es).index("test_index").query({"match": {"name": "张三"}})
for data in res3:
    print(data.to_dict())

运行结果:

 

在上述执行execute方法将请求发送给elasticsearch:

response = res.execute()

不需要执行execute()方法,迭代后可以通过to_dict()方法将Search对象序列化为一个dict对象,这样可以方便调试。

query方法

查询,参数可以是Q对象,也可以是query模块中的一些类,还可以是自已写上如何查询。

示例代码1:

from elasticsearch_dsl import connections, Search, Q
import time

# 方式一:连接es
es = connections.create_connection(hosts=["127.0.0.1:9200"], timeout=20)
# print(es)

res = Search(using=es, index="test_index").query().query()  # 当调用.query()方法多次时,内部会使用&操作符
print(res.to_dict())

运行结果:

 

filter方法

在过滤上下文中添加查询,可以使用f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值