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

Python 操作 Elasticsearch 全指南:从连接到数据查询与处理

文章目录

  • Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
  • 引言
  • 安装 `elasticsearch-py`
  • 连接到 Elasticsearch
  • 创建索引
  • 插入数据
  • 查询数据
    • 1. 简单查询
    • 2. 布尔查询
  • 更新文档
  • 删除文档和索引
    • 删除文档
    • 删除索引
  • 批量插入数据
  • 处理分页结果
  • 总结


Python 操作 Elasticsearch 全指南:从连接到数据查询与处理

引言

在大数据分析与搜索应用中,Elasticsearch 是一种强大且灵活的分布式搜索引擎,而 Python 则以其易用性和强大的数据处理能力,成为开发者在数据操作中的理想选择。通过 Python 的 elasticsearch-py 客户端,我们不仅可以方便地建立与 Elasticsearch 的连接,还能高效完成数据的增删改查操作,实现复杂的搜索与分析任务。本文将带你从基础配置到高级查询,全方位解析如何使用 elasticsearch-py 库操作 Elasticsearch。无论你是初学者还是资深开发者,本指南将提供实用的代码示例和最佳实践,帮助你在数据管理与搜索优化中脱颖而出。

安装 elasticsearch-py

首先,确保已安装 elasticsearch-py,可通过以下命令安装:

pip install elasticsearch

安装完成后,库就可以在 Python 中使用了。


连接到 Elasticsearch

首先,我们需要在 Python 中建立到 Elasticsearch 的连接。以下代码展示了如何连接到本地的 Elasticsearch 服务器:

from elasticsearch import Elasticsearch# 连接到本地的 Elasticsearch 服务
es = Elasticsearch(hosts=["http://localhost:9200"])
# 检查连接是否成功
if es.ping():print("Connected to Elasticsearch")
else:print("Could not connect to Elasticsearch")

此代码连接到运行在 localhost 上的 Elasticsearch 服务,并通过 ping() 方法检查连接是否成功。


创建索引

在 Elasticsearch 中,数据存储在索引(index)中。创建索引的代码如下:

# 创建一个索引名为 "my_index" 的索引
index_name = "my_index"
if not es.indices.exists(index=index_name):es.indices.create(index=index_name)print(f"Index '{index_name}' created.")
else:print(f"Index '{index_name}' already exists.")

在这里,我们首先检查索引是否已存在,如果不存在,则创建新的索引。


插入数据

我们可以使用 index() 方法来插入数据。以下是将一些数据插入到 my_index 中的示例:

# 插入数据
doc = {"name": "John Doe","age": 30,"location": "New York"
}
res = es.index(index=index_name, document=doc)
print("Document indexed:", res["_id"])

这段代码将一条包含 nameagelocation 的记录插入到 my_index 索引中,并输出该记录的 _id


查询数据

Elasticsearch 提供了多种查询方式,可以根据需求进行简单查询或复合查询。以下示例演示如何使用 search() 方法进行查询:

1. 简单查询

以下代码展示了如何查找 location 为 “New York” 的文档:

# 简单查询
query = {"query": {"match": {"location": "New York"}}
}
res = es.search(index=index_name, body=query)
for hit in res["hits"]["hits"]:print(hit["_source"])

2. 布尔查询

以下是更复杂的布尔查询示例,查找 location 为 “New York” 并且 age 大于 25 的文档:

# 布尔查询
query = {"query": {"bool": {"must": [{"match": {"location": "New York"}},{"range": {"age": {"gt": 25}}}]}}
}
res = es.search(index=index_name, body=query)
for hit in res["hits"]["hits"]:print(hit["_source"])

更新文档

要更新已存在的文档,可以使用 update() 方法。以下示例将修改某条记录的 age 字段:

# 更新文档
doc_id = "文档的_id"
update_body = {"doc": {"age": 35}
}
res = es.update(index=index_name, id=doc_id, body=update_body)
print("Document updated:", res["_id"])

在这里,我们将指定文档的 age 更新为 35


删除文档和索引

我们可以删除不需要的数据和索引,以保持数据库整洁。

删除文档

# 删除文档
res = es.delete(index=index_name, id=doc_id)
print("Document deleted:", res["_id"])

删除索引

# 删除索引
es.indices.delete(index=index_name)
print(f"Index '{index_name}' deleted.")

批量插入数据

elasticsearch.helpers 模块提供了 bulk 方法,可以一次插入多条数据。以下是批量插入的示例:

from elasticsearch.helpers import bulk# 构建文档列表
docs = [{"_index": index_name, "_source": {"name": "Alice", "age": 25, "location": "London"}},{"_index": index_name, "_source": {"name": "Bob", "age": 27, "location": "Paris"}},{"_index": index_name, "_source": {"name": "Charlie", "age": 35, "location": "Berlin"}}
]# 批量插入
bulk(es, docs)
print("Bulk insertion completed.")

处理分页结果

如果查询返回大量数据,可以通过 fromsize 参数进行分页。以下是分页的查询示例:

query = {"query": {"match_all": {}},"from": 0,"size": 2
}res = es.search(index=index_name, body=query)
for hit in res["hits"]["hits"]:print(hit["_source"])

这里指定 from: 0size: 2,即返回第一页的 2 条数据。


总结

本文介绍了在 Python 中使用 elasticsearch-py 连接到 Elasticsearch 的基本操作,包括连接、创建索引、插入数据、查询数据、更新和删除数据,以及批量操作。elasticsearch-py 使得 Python 程序可以方便地与 Elasticsearch 交互,适用于日志分析、数据挖掘等需要全文搜索的场景。

相关文章:

Python 操作 Elasticsearch 全指南:从连接到数据查询与处理

文章目录 Python 操作 Elasticsearch 全指南:从连接到数据查询与处理引言安装 elasticsearch-py连接到 Elasticsearch创建索引插入数据查询数据1. 简单查询2. 布尔查询 更新文档删除文档和索引删除文档删除索引 批量插入数据处理分页结果总结 Python 操作 Elasticse…...

Jarvis March算法详解及Python实现(附设计模式案例)

目录 Jarvis March算法详解及Python实现(附设计模式案例)第一部分:Jarvis March算法概述与原理1.1 什么是Jarvis March算法?1.2 算法原理1.3 算法流程1.4 时间复杂度第二部分:Jarvis March算法的Python实现(面向对象设计)2.1 面向对象设计2.2 代码实现2.3 代码解释第三部…...

AIGC中的文本风格迁移:基于深度学习的实现

引言 文本风格迁移是自然语言处理领域的一个重要研究方向,它可以将文本从一种风格转换为另一种风格,同时保留其原有的内容。随着深度学习技术的发展,文本风格迁移的方法变得越来越先进和高效。本文将探讨基于序列到序列模型(Seq2…...

丹摩征文活动 |【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …...

响应“一机两用”政策 落实政务外网安全

在数字化时代,政务办公外网安全的重要性日益凸显,特别是在“一机两用”的背景下,即同一台终端既要处理政务内网的数据,又要访问互联网,这对网络安全提出了更高的要求。深信达SPN安全上网方案,即反向沙箱技术…...

通过JS删除当前域名中的全部COOKIE教程

有时候需要通过JS来控制一下网站的登录状态,就例如:网站登出功能,我们可以直接通过JS将所有COOKIE删除,COOKIE删除之后,网站自然也就退出了。 那么今天我就给大家分享一段JS的函数,通过调用这段函数就可以实现删除COO…...

Flutter:Widget生命周期

StatelessWidget:无状态部件的生命周期 import package:flutter/material.dart;void main() {runApp(App()); }class App extends StatelessWidget {overrideWidget build(BuildContext context) {return MaterialApp(home: MyHomePage(title: MyHome),);} }class M…...

Flutter:Dio下载文件到本地

import dart:io; import package:dio/dio.dart;main(){// 创建dio对象final dio Dio();// 下载地址var url https://*******.org/files/1.0.0.apk;// 手机端路径String savePath Directory.systemTemp.path/ceshi.apk;print(savePath);downLoad(dio,url,savePath); }downLo…...

[⑧5G NR]: PBCH payload生成

本篇博客记录下5G PBCH信道中payload数据的生成方式。PBCH payload一共32个比特,基本结构如下图: 根据SSB PDU中bchPayloadFlag的值有三种方式得到PBCH payload。 bchPayloadFlag 0:全部32比特由MAC层提供。 bchPayloadFlag 1:M…...

查看解决端口占用,以及docker解决端口占用的原理

在软件开发和部署过程中&#xff0c;端口占用是一个常见的问题。以下是查看和解决端口占用问题的完整解决方案&#xff1a; 一、查看端口占用情况 1. 在 Linux 系统中 方法一&#xff1a;使用 lsof 命令 sudo lsof -i:<端口号>输出信息中会显示占用端口的进程名称、PI…...

力扣-Hot100-链表其一【算法学习day.34】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…...

centos7 升级openssl 与升级openssh 安装卸载 telnet-server

前言&#xff1a; 服务器被安全扫描&#xff0c;扫出了漏洞需要修复&#xff0c;根据提示将openssh升级为9.8p1的版本&#xff0c;同时需要升级openssl&#xff0c;但是升级openssh可能会导致ssh连接失败&#xff0c;从而无法继续操作&#xff0c;特别是远程机房尤为危险&#…...

C++知识点总结(57):STL综合

STL综合 一、数据结构1. 队列2. 映射 二、队列例题1. 约瑟夫环&#xff08;数据加强&#xff09;2. 打印队列3. 小组队列4. 日志统计 2.0 三、映射真题1. 眼红的 Medusa2. 美食评委 一、数据结构 1. 队列 功能代码定义queue<tp>q入队.push(x)出队.pop()队头.front()队尾…...

mac2019环境 Airflow+hive+spark+hadoop本地环境安装

1 环境介绍 本地安装可分为两个部分&#xff0c;mac软件环境&#xff0c; python开发环境 ps: 安装过程参考chatgpt、csdn文章 1.1 mac软件环境 目标安装的的软件是hive、apache-spark、hadoop&#xff0c;但是这三个软件又依赖java(spark依赖&#xff09;、ssh&#xff08…...

如何使用EasyExcel生成多列表组合填充的复杂Excel示例

作者&#xff1a;Funky_oaNiu 一、&#xff08;需求&#xff09;生成的表格效果&#xff1a;二、搞一个模板文件三、建立对应的表格实体类四、开始填充五、Vue3前端发起请求下载六、官方文档及AI问答 一、&#xff08;需求&#xff09;生成的表格效果&#xff1a; 其中只有顶部…...

【MySQL】MySQL在Centos环境安装

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; MySQL 目录 &#x1f308;前言&#x1f525;卸载不要的环境&#x1f525;检查系统安装包&#x1f525;卸载这些默认安装包&#x1f525;获取mysql官方yum源&#x1f525;安装mysql yum源…...

JDBC-Mysql 时区问题详解

目录 一、前置准备 1.1 版本号列表 1.2 Sql脚本 1.3 application.yaml配置 1.4 数据库时区设置 二、java Date类型与&#xff08;jdbcType&#xff09;TIMESTAMP类型的转换 2.1 jdbc对serverTimeZone的处理 2.2 java Date转&#xff08;jdbcType&#xff09;TIMESTAMP …...

前端页面一些小点

案例一&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>快递单号查询</title><…...

Postman接口测试(断言、关联、参数化、输出测试报告)

基本界面展示 Get、Post请求 Postman断言 使用postman来判断预期结果与实际结果是否一致 响应状态码断言 响应包含字符串 断言判断字符串的格式 关联 用于解决http请求之间存在依赖关系 依赖&#xff1a;一个http请求的响应结果中的数据&#xff0c;被另一个请求使用 登…...

redis和mongodb等对比分析

Redis 和 MongoDB 都是非常流行的 NoSQL 数据库,它们在数据存储模型、性能、扩展性等方面有很大的差异。下面是 Redis 和 MongoDB 的对比分析: 1. 数据模型 Redis: 键值存储:Redis 是一个内存数据结构存储,它支持多种数据类型,如字符串、哈希、列表、集合、有序集合等。…...

Linux服务器无GPU也能跑!Ollama部署DeepSeek-R1模型存储路径自定义与性能调优指南

Linux服务器无GPU高效部署DeepSeek-R1模型全攻略&#xff1a;从存储路径优化到性能调优 当你在云服务器或老旧设备上尝试运行AI模型时&#xff0c;是否经常遇到存储空间不足或性能低下的困扰&#xff1f;本文将带你深入探索如何在无GPU的Linux环境中&#xff0c;通过Ollama高效…...

如何零门槛拥有专属AI数字人?Duix.Avatar全流程实践指南

如何零门槛拥有专属AI数字人&#xff1f;Duix.Avatar全流程实践指南 【免费下载链接】Duix-Avatar 项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar 想制作个人数字分身却被技术门槛劝退&#xff1f;每月花费数千元购买商业数字人服务让你望而却步&…...

Reachability.swift终极指南:现代iOS应用网络状态管理完全解析

Reachability.swift终极指南&#xff1a;现代iOS应用网络状态管理完全解析 【免费下载链接】Reachability.swift Replacement for Apples Reachability re-written in Swift with closures 项目地址: https://gitcode.com/gh_mirrors/re/Reachability.swift Reachabilit…...

原创:华为大模型万卡训推一体破局方案

华为大模型万卡训推一体破局方案 作者&#xff1a;华夏之光永存 摘要&#xff1a;本文针对华为昇腾大模型算力集群面临的训推割裂、生态适配成本高、HBM显存被卡脖子、内部多部门对齐困难、客户规模化部署账算不清等行业核心痛点&#xff0c;提出一套先锁决策、再建架构、最后落…...

Meta Manus vs OpenClaw:2026年AI Agent之战,谁才是你的最佳选择?

## 引言2026年AI Agent市场迎来爆发式增长&#xff0c;预计到2034年将达到1400亿美元规模。在这个赛道上&#xff0c;Meta的Manus和开源项目OpenClaw成为最受关注的两大竞争者。本文将深入分析两者的差异&#xff0c;帮助你做出最佳选择。## Meta Manus&#xff1a;巨头的入场#…...

Python MCP服务部署成本飙升?5个被90%团队忽略的隐性开销及实时监控方案

第一章&#xff1a;Python MCP服务部署成本飙升的真相与警示Python MCP&#xff08;Model Control Plane&#xff09;服务在微服务架构中承担模型注册、版本调度、A/B测试路由等关键职责。近期大量团队反馈其云上部署成本在两周内激增300%以上&#xff0c;远超业务增长曲线。深…...

告别臃肿控制中心,拥抱开源替代方案:G-Helper硬件调校效率提升指南

告别臃肿控制中心&#xff0c;拥抱开源替代方案&#xff1a;G-Helper硬件调校效率提升指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and…...

Wan2.2-I2V-A14B镜像应用案例:快速生成高质量短视频,助力内容创作

Wan2.2-I2V-A14B镜像应用案例&#xff1a;快速生成高质量短视频&#xff0c;助力内容创作 1. 引言&#xff1a;短视频创作的新范式 在数字内容爆炸式增长的今天&#xff0c;短视频已成为最主流的内容形式之一。无论是电商平台的商品展示、社交媒体上的创意内容&#xff0c;还…...

3个步骤解决CAJ文献跨平台阅读难题:开源格式转换工具全解析

3个步骤解决CAJ文献跨平台阅读难题&#xff1a;开源格式转换工具全解析 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换&#xff0c;成功与否&#xff0c;皆是玄学。 项目地址: https://gitcode.c…...

5分钟搞定!Cesium/Leaflet/OpenLayers调用免费瓦片地图资源全攻略

三大地图框架快速调用免费瓦片资源实战指南 第一次接触GIS开发时&#xff0c;最让人头疼的莫过于地图底图资源的获取。作为项目的基础支撑&#xff0c;地图瓦片的质量和稳定性直接影响最终用户体验。但商业地图API往往价格不菲&#xff0c;对个人开发者和小型项目来说成本压力较…...