当前位置: 首页 > 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 是一个内存数据结构存储,它支持多种数据类型,如字符串、哈希、列表、集合、有序集合等。…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...