使用Elasticsearch Python SDK 查询Easysearch

随着数据分析需求的不断增长,能够高效地查询和分析大数据集变得越来越重要。Elasticsearch作为一种强大的分布式搜索和分析引擎,被广泛应用于各种场景。Easyearch 支持原生 Elasticsearch 的 DSL 查询语法,确保原业务代码无需调整即可无缝迁移。同时,EasySearch还支持 SQL 查询,为熟悉 SQL 的开发人员提供更加便捷的数据分析方式。此外,EasySearch 兼容 Elasticsearch 的 SDK 和现有索引存储格式,支持冷热架构和索引生命周期管理,确保用户能够轻松实现数据的无缝衔接。

Elasticsearch Python客户端提供了一种简便的方法,使得开发者可以通过DSL、SQL语法对Elasticsearch索引进行查询。同时,Elasticsearch Python客户端还提供了高级功能如批量操作API。本文将详细介绍如何安装和使用Elasticsearch Python客户端,以便在Python应用程序中对Elasticsearch执行DSL和SQL查询。

1. 安装 Elasticsearch Python 客户端

要使用Elasticsearch Python客户端,首先需要通过pip进行安装。打开终端或命令提示符,并运行以下命令:

pip install elasticsearch==7.13.1

如果使用默认版本安装,会安装8.x的依赖,可能会报错 elasticsearch.UnsupportedProductError: The client noticed that the server is not Elasticsearch and we do not support this unknown product.

由于Elasticsearch 7.10.2以后变更了许可模式,引入了 Server Side Public License (SSPL) 和 Elastic License,很多基于Elasticsearch 7.10.2分支出来的搜索引擎需要使用7.x版本的SDK和agent,比如Beats全家桶。

在这里插入图片描述
这是一个获取集群信息的demo,使用es.cluster.health() 调用 Elasticsearch 集群的健康检查API,返回集群的健康状态。

由于使用了自签名证书,所以在初始化时加上 verify_certs=False 参数,同时使用 warnings.filterwarnings("ignore") 设置 Python 的警告系统,忽略所有发出的警告。这在生产代码中通常不推荐,因为它会隐藏潜在的问题,但在开发或测试环境中,如果警告信息太多干扰调试,可能会暂时使用。

import urllib3
import elasticsearch
from elasticsearch import Elasticsearch
import warnings
from pprint import pprint# 禁用所有警告
warnings.filterwarnings("ignore")print(elasticsearch.VERSION)
# 禁用警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)url = "https://ip:9200/"
user_passwd = ('user', 'passwd')# 建立连接
es = Elasticsearch([url],http_auth=user_passwd,verify_certs=False,
)# 检查集群健康状态
health = es.cluster.health()
pprint(health)

2. 准备示例数据

在进行查询之前,我们需要在 Easyearch 中创建一些示例数据。

# 定义示例数据
sample_data = [{"index": {"_index": "my_index"}},{"field": "value1", "another_field": 10},{"index": {"_index": "my_index"}},{"field": "value2", "another_field": 20},{"index": {"_index": "my_index"}},{"field": "value3", "another_field": 30},{"index": {"_index": "my_index"}},{"field": "bulk_value1", "another_field": 100},{"index": {"_index": "my_index"}},{"field": "bulk_value2", "another_field": 200},{"index": {"_index": "my_index"}},{"field": "bulk_value3", "another_field": 300}
]# 批量插入示例数据
response = es.bulk(body=sample_data)
print(response)

3. 使用 REST API 进行查询

REST API 是与 EasySearch 进行通信的常用方式。通过 REST API,开发者可以发送 HTTP 请求来执行各种操作,包括索引文档、搜索数据等。以下示例展示了如何在 Python 中执行 REST 查询。

由于是REST API,我们可以先使用Postman进行测试。

在这里插入图片描述

我们可以看到HTTP端点可以正常返回,然后就可以使用编程方式进行访问了:

import requests
from requests.auth import HTTPBasicAuth
from pprint import pprinturl = "https://ip:9200/"
user_passwd = ('user', 'passwd')# 构建查询参数
query = {"query": {"match": {"field": "value1"}}
}dsl = f"{url}/my_index/_search"response = requests.get(dsl, json=query, auth=HTTPBasicAuth(*user_passwd), verify=False)
pprint(response.json())# 处理查询结果
if response.status_code == 200:results = response.json()for hit in results['hits']['hits']:print(hit)
else:print(f"Error: {response.status_code}")

4. 使用 Elasticsearch Python SDK 进行 DSL 增删改查

DSL(Domain-Specific Language)是 Elasticsearch/EasySearch的原生查询语言,允许用户构建复杂的查询。以下示例展示了如何在 Elasticsearch Python SDK 中执行 DSL 查询。

# 构建 DSL 查询
dsl_query = {"query": {"match": {"field": "value1"}}
}# 执行 DSL 查询
response = es.search(index="my_index", body=dsl_query)results = response.get("hits")
# 处理查询结果
if results:for hit in results['hits']:print(hit)
else:print(f"Error: {response.status_code}")

插入数据

如果不指定document ID,那么随机生成一个ID并写入。

doc = {"field": "value4", "another_field": 9999}
response = es.index(index="my_index", body=doc)
print(response)

更新数据

指定ID为1来手动更新索引:

doc = {"field": "value4", "another_field": 9999}
response = es.index(index="my_index", body=doc, id=1)
print(response)

更新单条数据

# 更新单条数据
update_body = {"doc": {"another_field": 50}}
response = es.update(index="my_index", id="1", body=update_body)
pprint(response)

删除数据

# 删除单条数据
response = es.delete(index="my_index", id="1")
pprint(response)

5. 使用 Elasticsearch Python SDK 进行 SQL 查询

创建客户端实例后,我们可以使用 sql 方法执行 SQL 查询。以下示例展示了如何执行一个简单的 SELECT 查询。

# 执行 SQL 查询
query_sql = {"query": "SELECT * FROM my_index"
}res = es.sql.query(body=query_sql)
pprint(res)

6. 使用 Elasticsearch Python SDK 进行批量操作

批量操作 API 允许用户一次性对多个文档进行创建、更新或删除操作,极大提高了操作效率。以下示例展示了如何使用 Elasticsearch Python SDK 中的批量操作。

批量插入数据

# 定义批量插入数据
bulk_data = [{"index": {"_index": "my_index"}},{"field": "bulk_value1", "another_field": 100},{"index": {"_index": "my_index"}},{"field": "bulk_value2", "another_field": 200},{"index": {"_index": "my_index"}},{"field": "bulk_value3", "another_field": 300}
]# 执行批量插入操作
response = es.bulk(body=bulk_data)
pprint(response)

批量更新数据

# 定义批量更新数据
bulk_update_data = [{"update": {"_id": "1", "_index": "my_index"}},{"doc": {"another_field": 110}},{"update": {"_id": "2", "_index": "my_index"}},{"doc": {"another_field": 220}}
]# 执行批量更新操作
response = es.bulk(body=bulk_update_data)
pprint(response)

批量删除数据

# 定义批量删除数据
bulk_delete_data = [{"delete": {"_id": "1", "_index": "my_index"}},{"delete": {"_id": "2", "_index": "my_index"}}
]# 执行批量删除操作
response = es.bulk(body=bulk_delete_data)
print(response)

7. 使用 Elasticsearch Python SDK 进行索引级别操作

Elasticsearch Python SDK 还支持索引级别的操作,如创建索

引、删除索引和检查索引是否存在。以下是一些示例:

创建索引

# 创建索引
index_body = {"settings": {"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"properties": {"field": {"type": "text"},"another_field": {"type": "integer"}}}
}
response = es.indices.create(index="new_index", body=index_body)
pprint(response)

删除索引

# 删除索引
response = es.indices.delete(index="new_index")
pprint(response)

检查索引是否存在

# 检查索引是否存在
response = es.indices.exists(index="new_index")
pprint(response)

8. 总结

Elasticsearch Python SDK 提供了一种简便的方法,使得开发者可以通过熟悉的 DSL 和 SQL 语法对 EasySearch 进行查询。同时,SDK 还提供了一些高级功能如批量操作 API,使得查询和数据操作更加高效。开发者可以更灵活地构建复杂查询,充分利用 EasySearch 的强大功能。无论您是执行简单的 SQL 查询,还是构建复杂的 DSL 和 REST 查询,Elasticsearch Python SDK 都能满足您的需求。如果您还未尝试过这个强大的工具,现在就安装并使用它吧!通过 EasySearch,您将能够更加高效地处理和分析大数据集,为您的数据驱动决策提供有力支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化校园设施维护,故障类型功能全解析

在智慧校园的日常运作中,报修管理系统的故障类型功能扮演着至关重要的角色。它不仅简化了设备维修的流程,还极大地提升了校园设施的维护效率。该功能的核心在于,它允许系统管理员创建、编辑和删除一系列故障类型,涵盖从网络连接问…

vue实现动态图片(gif)

目录 1. 背景 2. 分析 3. 代码实现 1. 背景 最近在项目中发现一个有意思的小需求,鼠标移入一个盒子里,然后盒子里的图就开始动起来,就像一个gif一样,然后鼠标移出,再按照原来的变化变回去,就像变形金刚…

QT--控件篇二

一、文本框 1. QLineEdit 文本框通常使用QLineEdit和QTextEdit这两个类来实现。 QLineEdit:用于单行文本输入。QTextEdit:用于多行文本输入,可以包含丰富的文本格式。 用setText(QString txt);设置默认的显示内容,用QString tex…

【NOI】C++数据结构入门之一维数组(一)数组基础

文章目录 前言一、概念1.导入2.数组2.1 数组的创建2.2 数组的使用 二、例题讲解问题:1423 - 考试成绩的简单统计问题:1153 - 查找“支撑数”问题:1156 - 排除异形基因问题:1155 - 找找谁的身高超过全家的平均身高问题:…

计算机网络生成树协议介绍与实践

生成树协议 1.环路 二层环路:数据链路层,交换机(二层设备)通过线路连接环状。即物理成环并且没有开启防环协议。 危害:广播风暴:交换机将未知帧广播,收到后的交换机继续广播,不断…

全国地级市-产业升级、高级化、合理化数据集(1999-2022年)

数据年份:1999-2022年 数据范围:地级市以上城市 数据来源:中国城市统计NJ 数据整理:内含原始版本、线性插值版本、ARIMA填补版本 数据说明:参考干春晖(2011)《经济研究》的文章 &#xff0c…

数据结构(单链表(1))

前言 线性表中有着许多的结构,如顺序表和链表。而单链表则是链表的最基础的一种形式,下面就让我们对其做一个了解。 概念 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次…

ENSP中VLAN的设置

VLAN的详细介绍 VLAN(Virtual Local Area Network)即虚拟局域网,是一种将一个物理的局域网在逻辑上划分成多个广播域的技术。 以下是关于 VLAN 的一些详细介绍: 一、基本概念 1. 作用: - 隔离广播域&#xff1a…

Notebook 在复现数据科学研究成果中的丝滑使用

对于数据科学和 AI 科研人员而言,研究成果的复现至关重要。成果复现既是一种研究算法的方式,也有助于科研人员找到研究的新途径。 IDP 中提供自研 notebook 交互式编程环境,它非常适合做数据分析与代码展示,主要功能包括&#xf…

java基础概念01-注释、关键字、字面量、变量

一、注释 注释内容不会参与编译和运行,仅仅是对代码的解释说明。 1-1、注释的三种类型 1、单行注释://…… // 这是单行注释 2、多行注释:/*…….*/ /* 这是一个 多行注释 */ 3、文档注释 特殊的多行注释,以/**开头&#xf…

【初阶数据结构】理解堆的特性与应用:深入探索完全二叉树的独特魅力

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

Qt类 | QObject类详解

文章目录 一、QObject类介绍二、Properties(属性)三、Public Functions(公共函数)四、Public Slots(公共槽函数)五、Signals(信号)六、Static Public Members(静态公共成…

react Ant Design 动态表头添加操作列

模拟后端返回的表头、列表数据 注意:我们要在表头数据中添加一个 render 函数,里面就是你操作列的内容,value是你数据列表每行的对象 ,item 是你表头的对象 页面中去处理这个两个数组 dataList.forEach((item, index) > {item.…

昇思25天学习打卡营第24天 | RNN实现情感分类

概述 情感分类是自然语言处理中的经典任务,是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型,实现如下的效果: 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This film is great 正确标…

dmasmtool工具详细用法

DMASMTOOL 是 DMASM 文件系统管理工具,提供了一套类 Linux 文件操作命令,用于管理 ASM 文件,是管理、维护 DMASM 的好帮手。DMASMTOOL 工具使用 DMASMAPI 连接到 DMASMSVR,并调用相应的 DMASMAPI 函数,实现创建、拷贝、…

C1W2.LAB.Visualizing Naive Bayes

理论课:C1W2.Sentiment Analysis with Nave Bayes 文章目录 导入包Calculate the likelihoods for each tweetUsing Confidence Ellipses to interpret Nave Bayes 理论课: C1W2.Sentiment Analysis with Nave Bayes 导入包 在下面的练习中&#xff0…

everything搜索不到任何文件-设置

版本: V1.4.1.1024 (x64) 问题:搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含

Python爬虫速成之路(3):下载图片

hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:绝命Coding-CSDN博客 &a…

SpringMVC源码解析(一):web容器启动流程

SpringMVC源码系列文章 SpringMVC源码解析(一):web容器启动流程 目录 一、SpringMVC全注解配置1、pom文件2、web容器初始化类(代替web.xml)3、SpringMVC配置类(代替springmvc.xml)4、测试Controller 二、SpringServletContainerInitializer1、web容器初始化入口2、…

从本地到全局:基于图的RAG方法进行查询聚焦原理摘要

摘要 使用检索增强生成(RAG)从外部知识源检索相关信息,使大型语言模型(LLMs)能够回答有关私有和/或以前未见过的文档集合的问题。然而,当针对整个文本文档库提出全局问题时,例如“数据集中的主…