当前位置: 首页 > news >正文

Python访问ElasticSearch

ElasticSearch是广受欢迎的NoSQL数据库,其分布式架构提供了极佳的数据空间的水平扩展能力,同时保障了数据的可靠性;反向索引技术使得数据检索和查询速度非常快。更多功能参见官网介绍

https://www.elastic.co/cn/elasticsearch/

下面简单罗列了通过Python访问ES的方法。

注:本文不是Elasticsearch的入门介绍,需要有ES基本知识。

Python - ElasticSearch 接口

Elastic提供的Python ElasticSearch原生接口,源代码托管在Github上。项目链接和文档链接如下:

https://github.com/elastic/elasticsearch-py

https://www.elastic.co/guide/en/elasticsearch/client/python-api/7.17/examples.html#examples

下面是常见操作示例:

建立ES连接

    
from elasticsearch import Elasticsearch, helpers
from elasticsearch.exceptions import ConnectionError, ConnectionTimeout, TransportError
...try :#es = Elasticsearch(es_server, retry_on_timeout=True)es = Elasticsearch(es_server, http_auth=(es_user, es_pass), timeout=30, max_retries=10, retry_on_timeout=True) print("Connection failed, exit ...")sys.exit(1)

创建ES数据

doc = {'author': 'author_name','text': 'Interesting content...','timestamp': datetime.now(),
}
res = es.index(index="test-index", id=1, body=doc)

获取ES数据

res = es.get(index="test-index", id=1)

通过查询获取ES数据

    query={"match_all":{}}try :result = es.search(index=index, query=query, size=10000)except([ConnectionError, ConnectionTimeout, TransportError]):print("Connection failed, exit ...")sys.exit(1)data=[]for item in result['hits']['hits'] :data.push(item['_source'])

更新ES数据

doc = {'author': 'author_name','text': 'Interesting modified content...','timestamp': datetime.now(),
}
res = es.update(index="test-index", id=1, body=doc)

删除ES数据

es.delete(index="test-index", id=1)

ElasticSearch-DSL python接口

原生ES python接口在查询时需要编写复杂的DSL查询语句,Elastic提供的ElasticSearch-DSL库极大地简化了查询语法,方便编写查询语句。相关项目和文档的URL:

https://github.com/elastic/elasticsearch-dsl-py

https://elasticsearch-dsl.readthedocs.io/en/latest/

示例代码如下:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Searchclient = Elasticsearch()s = Search(using=client, index="my-index") \.filter("term", category="search") \.query("match", title="python")   \.exclude("match", description="beta")s.aggs.bucket('per_tag', 'terms', field='tags') \.metric('max_lines', 'max', field='lines')response = s.execute()for hit in response:print(hit.meta.score, hit.title)for tag in response.aggregations.per_tag.buckets:print(tag.key, tag.max_lines.value)

ElasticSearch - Pandas 接口

Pandas是流行的大数据处理Python库,Elastic提供了Pandas DataFrame的接口 ,可以直接将索引(数据表)中的数据放到 pandas 的 dataframe 中,非常方便。相关项目和文档URL如下:

https://github.com/elastic/eland

https://eland.readthedocs.io/en/latest/reference/dataframe.html

注意:返回的并不是原生Pandas DataFrame,而是Elastic自己的实现,但并没有实现所有DataFrame的功能。

示例代码如下:

import eland as ed# Connecting to an Elasticsearch instance running on 'localhost:9200'
df = ed.DataFrame("localhost:9200", es_index_pattern="flights")

也可以先建立 ES 连接

# Connecting to an Elastic Cloud instance
from elasticsearch import Elasticsearches = Elasticsearch("localhost:9200",http_auth=("elastic", "<password>")
)
df = ed.DataFrame(es, es_index_pattern="flights")

 

第三方 ElasticSearch - Pandas 接口

eland虽然可以方便将 Elastic 中的数据转换为 dataframe,但没有提供将 dataframe 保存到 Elastic的接口。这时我们需要使用第三方的接口。es_pandas是开源的 ES Pandas接口,可以直接将ES查询得到的数据以Pandas DataFrame的方式返回,也可将 dataframe 保存到 Elastic 中。

https://github.com/fuyb1992/es_pandas

初始化与ES的连接

import pandas as pd
from es_pandas import es_pandas...
epcon = None
try :epcon = es_pandas(esurl)
except Exception as e:logger.error("Initializa DB connection failed! Error[{}]".format(str(e)))

从ES表中获取数据,返回格式为Pandas DataFrame

# 从ES表中获取数据返回DataFrame 
try: if query is None:data = epcon.to_pandas(dbname, infer_dtype=True, show_progress=False)else:data = epcon.to_pandas(dbname, infer_dtype=True, show_progress=False, query_rule=query)
except exceptions.NotFoundError:logger.debug("Not found data. Params: dbname[{}] query[{}]".format(dbname, query))

将Pandas DataFrame中的数据写入ES表中

# 将DataFrame中的数据写入ES表中   
ret = True
try:epcon.to_es(df, dbname, use_index=True, _op_type='create', thread_count=2, chunk_size=10000, show_progress=False)
except ConnectionError:ret = Falselogger.error("Save data failed! Params: dbname[{}] data[{}],, connection error!".format(dbname, df))

将Pandas DataFrame中的数据更新到ES表中

# 将DataFrame中的更新到ES表中   
ret = True
try:epcon.to_es(df, dbname, use_index=True, _op_type='update', thread_count=2, chunk_size=10000, show_progress=False)
except ConnectionError:ret = Falselogger.error("Update data failed! Params: dbname[{}] data[{}],, connection error!".format(dbname, df))

将Pandas DataFrame中的数据从ES表中删除

# 将DataFrame中的数据从ES表中删除   
ret = True
try:epcon.to_es(df, dbname, use_index=True, _op_type='delete', thread_count=2, chunk_size=10000, show_progress=False)
except ConnectionError:ret = Falselogger.error("Delete data failed! Params: dbname[{}] data[{}],, connection error!".format(dbname, df))

相关文章:

Python访问ElasticSearch

ElasticSearch是广受欢迎的NoSQL数据库&#xff0c;其分布式架构提供了极佳的数据空间的水平扩展能力&#xff0c;同时保障了数据的可靠性&#xff1b;反向索引技术使得数据检索和查询速度非常快。更多功能参见官网介绍 https://www.elastic.co/cn/elasticsearch/ 下面简单罗列…...

Flutter 混合开发 - 动态下发 libflutter.so libapp.so

背景 最近在做包体积优化&#xff0c;在完成代码混淆、压缩&#xff0c;裁剪ndk支持架构&#xff0c;以及资源压缩&#xff08;如图片转webp、mp3压缩等&#xff09;后发现安装包的中占比较大的仍是 so 动态库依赖。 具体查看发现 libflutter.so 和 libapp.so 的体积是最大的&…...

Peter算法小课堂—动态规划

Peter推荐算法书&#xff1a;《算法导论》 图示&#xff1a; 目录 钢条切割 打字怪人 钢条切割 算法导论&#xff08;第四版&#xff09;第十四章第一节&#xff1a;钢条切割 题目描述&#xff1a; 给定一根长度为 n 英寸的钢条和一个价格表 &#xff0c;其中 i1,2,…,n …...

2022–2023学年2021级计算机科学与技术专业数据库原理 (A)卷

一、单项选择题&#xff08;每小题1.5分&#xff0c;共30分&#xff09; 1、构成E—R模型的三个基本要素是&#xff08; B &#xff09;。 A&#xff0e;实体、属性值、关系 B&#xff0e;实体、属性、联系 C&#xff0e;实体、实体集、联系 D&#xff0e;实体、实体…...

Clojure 实战(4):编写 Hadoop MapReduce 脚本

Hadoop简介 众所周知&#xff0c;我们已经进入了大数据时代&#xff0c;每天都有PB级的数据需要处理、分析&#xff0c;从中提取出有用的信息。Hadoop就是这一时代背景下的产物。它是Apache基金会下的开源项目&#xff0c;受Google两篇论文的启发&#xff0c;采用分布式的文件…...

Django 分页(表单)

目录 一、手动分页二、分页器分页 一、手动分页 1、概念 页码&#xff1a;很容易理解&#xff0c;就是一本书的页码每页数量&#xff1a;就是一本书中某一页中的内容&#xff08;数据量&#xff0c;比如第二页有15行内容&#xff09;&#xff0c;这 15 就是该页的数据量 每一…...

socket实现视频通话-WebRTC

最近喜欢研究视频流&#xff0c;所以思考了双向通信socket&#xff0c;接下来我们就一起来看看本地如何实现双向视频通讯的功能吧~ 客户端获取视频流 首先思考如何获取视频流呢&#xff1f; 其实跟录音的功能差不多&#xff0c;都是查询电脑上是否有媒体设备&#xff0c;如果…...

simulink代码生成(九)—— 串口显示数据(纸飞机联合调试)

纸飞机里面的协议是固定的&#xff0c;必须按照协议配置&#xff1b; &#xff08;1&#xff09;使用EasyHEX协议&#xff0c;测试int16数据类型 测试串口发出的数据是否符合&#xff1f; 串口接收数据为&#xff1a; 打开纸飞机绘图侧&#xff1a; &#xff08;1&#xff09…...

Mysql数据库(中)——增删改查的学习(全面,详细)

上一篇主要对查询操作进行了详细的总结&#xff0c;本篇主要对增删改操作以及一些常用的函数进行总结&#xff0c;包括流程控制等&#xff1b;以下的代码可以直接复制到数据库可视化软件中&#xff0c;便于理解和练习&#xff1b; 常用的操作&#xff1a; #函数&#xff1a; S…...

test dbtest-03-对比 Liquibase、flyway、dbDeploy、dbsetup

详细对比 Liquibase、flyway、dbDeploy、dbsetup&#xff0c;给出对比表格 下面是一个简要的对比表格&#xff0c;涵盖了 Liquibase、Flyway、dbDeploy 和 DbSetup 这四个数据库变更管理工具的一些主要特点。 特点/工具LiquibaseFlywaydbDeployDbSetup开发语言Java&#xff0…...

力导向图与矩阵排序

Graph-layout force directed&#xff08;力导向图布局&#xff09;是一种用于可视化网络图的布局算法。它基于物理模型&#xff0c;模拟了图中节点之间的相互排斥和连接弹性&#xff0c;以生成具有良好可读性和美观性的图形布局。 在力导向图布局中&#xff0c;每个节点被视为…...

word 常用功能记录

word手册 多行文字对齐标题调整文字间距打钩方框插入三线表插入参考文献自动生成目录 多行文字对齐 标题调整文字间距 打钩方框 插入三线表 插入一个最基本的表格把整个表格设置为无框线设置上框线【实线1.5磅】设置下框线【实线1.5磅】选中第一行&#xff0c;设置下框线【实线…...

C#线程基础(线程启动和停止)

目录 一、关于线程 二、示例 三、生成效果 一、关于线程 在使用多线程前要先引用命名空间System.Threading&#xff0c;引用命名空间后就可以在需要的地方方便地创建并使用线程。 创建线程对象的构造方法中使用了ThreadStart()委托&#xff0c;当线程开始执行时&#xff0c…...

如何利用ChatGPT来提高编程效率

如何利用ChatGPT来提高编程效率 在当今这个信息爆炸和技术快速发展的时代,程序员们面临着巨大的压力,既要保证代码的质量,又要提高工作效率。幸运的是,人工智能(AI)正在改变我们编写和维护代码的方式,而OpenAI的ChatGPT是其中的佼佼者。本文将讨论如何利用ChatGPT以及结合…...

java智慧工地源码,互联网+建筑工地,实现对工程项目内人员、车辆、安全、设备、材料等的智能化管理

智慧工地全套源码&#xff0c;微服务JavaSpring Cloud UniApp MySql&#xff1b;支持多端展示&#xff08;大屏端、PC端、手机端、平板端&#xff09;演示自主版权。 智慧工地概念&#xff1a; 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&…...

创建并使用自己的C++模块(Windows10+MSVC)

module是C20种新引入的特性&#xff0c;关于module的介绍和好处&#xff0c;网上已有大量的文章&#xff0c;此处也不再赘述&#xff0c;本文仅记录在个人的环境上创建一个简单的module并使用这个module。 环境同上一篇文章&#xff08; windows10&#xff0c;MSVC C工具链&am…...

Spring Boot 2.7.11 集成 GraphQL

GraphQL介绍 GraphQL&#xff08;Graph Query Language&#xff09;是一种用于API的查询语言和运行时环境&#xff0c;由Facebook于2012年创建并在2015年公开发布。与传统的RESTful API相比&#xff0c;GraphQL提供了更灵活、高效和强大的数据查询和操作方式。 以下是GraphQL…...

软件工程期末总结

软件工程期末总结 软件危机出现的原因软件生命周期软件生命周期的概念生命周期的各个阶段 软件开发模型极限编程 可行性研究与项目开发计划需求分析结构化分析的方法结构化分析的图形工具软件设计的原则用户界面设计结构化软件设计面向对象面向对象建模 软件危机出现的原因 忽视…...

MidTool图文创作-GPT-4与DALL·E 3的结合

GPT-4与DALLE 3的结合 GPT-4是由OpenAI开发的最新一代语言预测模型&#xff0c;它在前代模型的基础上进行了大幅度的改进&#xff0c;不仅在文本生成的连贯性、准确性上有了显著提升&#xff0c;还在理解复杂语境和执行多步骤指令方面表现出了更高的能力。而DALLE 3则是一个创…...

Python将两个或多个列表合并为一个列表,并根据每个输入列表中的元素的位置将其组合在一起

将两个或多个列表合并为一个列表&#xff0c;并根据每个输入列表中的元素的位置将其组合在一起。 这个需求在实际开发过程中应该说非常常见&#xff0c;当然python也给我们内置了相关方法&#xff01; zip(*iterables, strictFalse) 在多个迭代器上并行迭代&#xff0c;从每…...

Ubuntu 24.04镜像源配置全攻略:从原理到实战(含常见报错解决)

Ubuntu 24.04镜像源深度解析与高效配置实战 最近在帮朋友配置新装的Ubuntu 24.04时&#xff0c;发现这个版本在软件源管理上做了重大调整——从传统的sources.list文件变成了结构化更强的sources.d目录配置方式。这个变化让不少习惯了旧版本的用户感到困惑&#xff0c;也让我意…...

【独家首发】Python扩展安全成熟度模型(PESMM v1.2):覆盖编译期/加载期/运行期的9维评分体系,仅限前500名开发者免费获取评估工具包

第一章&#xff1a;Python扩展模块安全概述Python 扩展模块&#xff08;如 C/C 编写的 .so/.dll 文件或 Cython 生成的二进制模块&#xff09;在提升性能的同时&#xff0c;也引入了原生层特有的安全风险。与纯 Python 代码不同&#xff0c;扩展模块直接操作内存、调用系统 API…...

wan2.1-vae开源可部署:支持国产操作系统(麒麟/UOS)的适配方案

wan2.1-vae开源可部署&#xff1a;支持国产操作系统&#xff08;麒麟/UOS&#xff09;的适配方案 1. 平台介绍 muse/wan2.1-vae 文生图是基于 Qwen-Image-2512 模型的AI图像生成平台&#xff0c;支持中英文提示词&#xff0c;可生成高质量、高分辨率的图像。该平台特别针对国…...

OpCore-Simplify:重新定义Hackintosh配置体验的技术实践

OpCore-Simplify&#xff1a;重新定义Hackintosh配置体验的技术实践 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当你第一次尝试在非苹果硬件上安装…...

论文AIGC检测率多少算正常?超标后怎么高效降AI率达标?

论文AIGC检测率多少算正常&#xff1f;超标后怎么高效降AI率达标&#xff1f; “我的论文AIGC率31%&#xff0c;这算高吗&#xff1f;”“学校要求低于多少&#xff1f;”“超标了怎么办&#xff1f;”——最近这类问题在各大毕业论文群里出现的频率越来越高。说实话我去年也是…...

QGIS3.28最新版行政区合并避坑指南:县转市数据融合的3个关键检查点

QGIS 3.28行政区合并实战&#xff1a;县转市数据融合的3个关键检查点 当我们需要将县级行政区数据合并为市级边界时&#xff0c;看似简单的"线转面融合"操作背后&#xff0c;往往隐藏着诸多数据陷阱。许多中级用户在QGIS中执行这类操作时&#xff0c;明明步骤正确却频…...

Scala入门必修课:val与var的深度对比与选择指南

Scala入门必修课&#xff1a;val与var的深度对比与选择指南1. 引言&#xff1a;变量定义的灵魂拷问2. 基础概念&#xff1a;val与var的定义2.1 直观区别2.2 类型推导3. 深入理解&#xff1a;从编译到执行3.1 编译后的字节码差异3.2 内存与性能考量4. 实际应用&#xff1a;选择指…...

为什么92%的Python WASM尝试失败?——资深编译器工程师披露LLVM-WASI链路5大隐性断点

第一章&#xff1a;Python WASM部署的现状与认知误区WebAssembly&#xff08;WASM&#xff09;正迅速成为浏览器端高性能计算的新基石&#xff0c;但将 Python 部署至 WASM 环境仍存在显著的认知断层。许多开发者误以为“Python 代码可直接编译为 WASM”&#xff0c;实则 Pytho…...

重新定义你的窗口管理体验 - StreamWindow 4.0

StreamWindow 4.0版本带来了重大更新&#xff0c;也做了很多优化和完善。 距离发布APP已经过去小半年了&#xff0c;这款macOS上的3D窗口管理工具随着4.0版本通过审核&#xff0c;带来大量的功能更新和完善&#xff0c;尤其引入了一种新的动画特效&#xff1a;扑克牌洗牌特效。…...

SEO_2024年最新SEO趋势分析与实战策略解读

<h1 id"2024seo">2024年最新SEO趋势分析与实战策略解读</h1> <p>在数字营销的快速发展中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;作为提升网站流量的重要手段&#xff0c;一直备受关注。2024年&#xff0c;SEO领域再度发生了一些重要…...