Python连接es笔记一之连接与查询es

这篇具有很好参考价值的文章主要介绍了Python连接es笔记一之连接与查询es。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有几种方式在 Python 中配置与 es 的连接,最简单最有用的方法就是定义一个默认的连接,如果系统不是需要访问多个集群,最建议的方式就是使用 create_connection 方法创建连接,然后所有的操作都会自动使用这个连接。

以下是本篇笔记目录:

  1. 安装依赖
  2. 连接
  3. Search 查询
  4. Response 返回结果详解

1、安装依赖

我们使用的依赖名称为 elasticsearch_dsl,我们这里使用的 es 版本是 7.2.0,所以安装方式如下:

pip3 install elasticsearch_dsl==7.2.0

2、连接

默认连接方式

我们可以通过下面的方式来连接 es:

from elasticsearch_dsl import connections

connections.create_connection(hosts=["localhost"], timeout=20)

或者我们也可以加一个 alias,用作连接的别名,在后面可以很方便的用上:

from elasticsearch_dsl import connections

connections.create_connection(alias="new_conn", hosts=["localhost"], timeout=20)
多集群连接

如果我们想同时连接多个集群,可以使用 configure 方法:

connections.configure(
    default={"hosts": "localhost"},
    dev={
        "hosts": ["example.com:9200"],
        "sniff_on_start": True,
    }
)
使用别名

当使用多个连接的时候,我们可以使用别名,也就是前面的 alias 参数来指代连接:

s = Search(using="default")

3、Search 查询

接下来介绍下如何在 Python 中查询 es 数据。

注意下,当我们安装 elasticsearch_dsl 依赖的时候,系统会自动为我们安装 elasticsearch 模块,我们可以直接引用。

我们默认前面已经设置好了全局的 es 连接,之后的操作都基于这个连接:

from elasticsearch_dsl import connections
connections.configure(
    default={"hosts": "localhost:9200"},
)

我们来执行一下查询和打印操作:

response = Search(using="default").query("match", name="张三丰").execute()
print(response)

可以看到 response 就打印出了我们在之前往 es 的 exam 这个 index 中写入的数据:

<Response: [<Hit(exam/16): {'name': '张三丰', 'address': '一个苹果'}>]>

我们先来介绍下执行查询的操作。

链式操作

这个查询的 API 是链式操作,可以允许你链接多个操作,比如我们前面的 Search() 后直接跟了 query() 方法,然后直接 execute()。

我们分开执行也是可以的:

s = Search(using="default")
s = s.query("match", name="张三丰")
response = s.execute()
指定 index

在上面的 Search() 方法里,我们通过 using 指定了连接,但是没有指定 index,那么就默认搜索的是该连接的全部 index,我们可以通过 index() 函数指定 index,也可以向 Search() 中添加 index 参数来指定 index。

s = Search(using="default", index="exam").query("match", name="张三丰")
response = s.execute()

s = Search(using="default").index("exam").query("match", name="张三丰")
response = s.execute()
转换 es 查询语句

如果我们想要查看执行的语句转换成的 es 的语句,可以使用 to_dict() 方法:

s = Search(using="default", index="exam").query("match", name="张三丰")
print(s.to_dict())

# {'query': {'match': {'name': '张三丰'}}}
删除语句

前面介绍了 s = Search().query() 的 execute() 是执行,获取返回结果,to_dict() 是转换成 es 语句,如果是需要删除查询的数据,可以如下操作:

s = Search(using="default").index("exam").query("match", name="张三丰")
s.delete()

4、Response 返回结果详解

为了详细查看 response 中的详细情况,我们可以在 Python 的 shell 中挨个执行下面的命令,获得 response 对象,然后再操作 response,当然,前面记得创建 es 的连接:

>>> s = Search(using="default").index("exam").query("match", name="张三丰")
>>> response = s.execute()

对于 response,本身我们可以使用 Python 中的列表的形式来访问它,来获取它的数据,比如执行 print(response[0]) 可以看到这条数据本身的信息:

>>> print(response[1])
# <Hit(exam/24): {'name': '张三丰', 'address': '中国湖北省', 'age': 22}>

如果我们查看 type(response) 可以发现它来源于 <class ‘elasticsearch_dsl.response.Response’> 定义了一个 iter() 方法,所以我们可以对这个对象使用迭代方法。

在这个方法内部它迭代的其实是 response.hits 属性,也就是我们 es 查询返回的数据。

所以我们执行 response[0] 和 response.hits[0] 是等效操作。

获取总数

因为我们上面的查询操作没有设置 size,所以默认最多返回的是 10 条数据,但如果我们想要获取符合我们查询条件的总数,我们可以这样获取:

count = response.hits.total.value
单条数据详情

上面介绍了我们可以通过 response[0] 获得单条数据,对于单条数据,我们还可以获取更多的详情信息。

hit = response.hits[0]

如果我们想一次性获取返回的数据的各个字段及相应的值,我们可以使用 to_dict() 方法:

hit.to_dict()

# {'name': '张三丰', 'address': '中国', 'age': 21}

获取单个值,比如 name,也可以直接:

print(hit.name)

也可以获取数据的 meta 信息,其中包含了这条数据所在的 index,id,匹配分值 score 等:文章来源地址https://www.toymoban.com/news/detail-405777.html

hit.meta

# {'index': 'exam', 'id': '23', 'score': 0.4700036, 'doc_type'...}

到了这里,关于Python连接es笔记一之连接与查询es的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python笔记一之excel的读取

    本文首发于公众号:Hunter后端 原文链接:Python笔记一之excel的读取 这里我常用的 python 对于 excel 的读取库有两个,一个是 xlsxwriter 用于操作 excel 的写入,一个是 xlrd 用于 excel 文件的读取。 使用的库的版本如下: xlsx==1.2.6 xlrd==1.1.0 新建一个 excel 添加一个 sheet: sheet 表格数据

    2024年02月04日
    浏览(33)
  • Python连接es笔记三之es更新操作

    本文首发于公众号:Hunter后端 原文链接:Python连接es笔记三之es更新操作 这一篇笔记介绍如何使用 Python 对数据进行更新操作。 对于 es 的更新的操作,不用到 Search() 方法,而是直接使用 es 的连接加上相应的函数来操作,本篇笔记目录如下: 获取连接 update() update_by_query() 批

    2024年02月07日
    浏览(36)
  • Python连接es笔记四之创建和删除操作

    本文首发于公众号:Hunter后端 原文链接:Python连接es笔记四之创建和删除操作 这一篇笔记介绍一下索引和数据的创建和删除。 其实对于索引来说,如果可以接触到 kibana 的话,可以很方便的在界面进行操作,这里简单介绍一下如何使用代码来操作索引的创建和删除。 使用的

    2024年02月07日
    浏览(34)
  • Mysql关联查询的几种方式(详解)

    在关系型数据库中,要进行多表查询,一般都会使用join连接。join连接的本质其实类似与集合的交并操作,Mysql实现关联查询常见的几种方式如下; 目录 1、左连接 2、右连接 3、内连接 4、全连接 5、左外连接 6、右外连接 7、全外连接 本次测试表结构和数据: A表 B表   概念说

    2024年02月08日
    浏览(33)
  • Oracle子查询改写的几种方式

    子查询是嵌套在另一个语句(如SELECT,INSERT,UPDATE或DELETE)中的SELECT语句。 通常,可以在任何使用表达式的地方使用子查询。 比如从以下的病人信息中查询最近一个月住院年龄最大的病人信息 从以上的信息中我们知道病人出生日期BIRTHDATE ,限制取数的时间范围算出年龄 首先我

    2024年02月09日
    浏览(30)
  • Es支持的查询方式

    1. Match Query:匹配查询,可以用于匹配一个字段中的文本。 2. Term Query:精确查询,用于匹配一个字段中的确切值。 3. Range Query:范围查询,用于匹配一个字段中的值在指定范围内的文档。 4. Bool Query:布尔查询,可以将多个查询组合起来使用。 5. Wildcard Query:通配符查询,用

    2024年02月13日
    浏览(27)
  • es使用和常用查询(包含多字段聚合查询,实体类方式保存es)

    1.导入es相关jar包 2.增加es配置 3.读取es相关配置   4.创建es实体类,与es mapping设计一致  5.创建es结构  6.创建类继承 ElasticsearchRepository 实现通过api保存实体类ESData到es  7.保存实体类ESData到es  8.es查询 多字段匹配查询,分组查询,分组后聚合

    2024年02月03日
    浏览(35)
  • Hudi Spark-SQL增量查询数据几种方式

    由于项目上主要用Hive查询Hudi,所以之前总结过一篇:Hive增量查询Hudi表。最近可能会有Spark SQL增量查询Hudi表的需求,并且我发现目前用纯Spark SQL的形式还不能直接增量查询Hudi表,于是进行学习总结一下。 先看一下官方文档上Spark SQL增量查询的方式,地址:https://hudi.apache.or

    2024年02月11日
    浏览(27)
  • ES delete_by_query条件删除的几种方式

     es 查询删除的几种方式 1.根据id删除 2.根据多个id删除 3.根据多个id范围删除 注意:删除完成后,执行以下脚本回收索引空间 curl -XPOST http://127.0.0.1:9200/indexname/_forcemerge?max_num_segments=1 

    2024年02月09日
    浏览(30)
  • Java提升数据库大数据查询速度的几种方式

    本文章以MySQL数据库为用例说明,列举出几个常用的提升查询速度的方式。 分页查询,在网络浏览中,经常会看到分页的使用,像百度搜索分页、文档资料分页等,这些都是一种常见的提升数据查询速度和用户体验的一种方式,数据库有limit,开发人员可使用此

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包