Python连接和操作Elasticsearch详细指南

Python连接和操作Elasticsearch详细指南

Python连接和操作Elasticsearch详细指南

Elasticsearch 是一个强大的搜索引擎,广泛应用于数据存储和搜索场景。通过 Python,我们可以方便地与 Elasticsearch 进行交互。本文将详细介绍如何在本地使用 Python 连接到服务器上的 Elasticsearch,并进行基本的操作。

一、服务器端配置

在开始之前,确保你的 Elasticsearch 服务已经在服务器上正确安装和配置。

ES

以下是一些基本的配置步骤:

1. 修改 Elasticsearch 配置文件

找到 Elasticsearch 的配置文件 elasticsearch.yml,并进行如下修改,以允许远程访问:

network.host: 0.0.0.0 http.port:9200discovery.type: single-node 

2. 开放防火墙端口

确保服务器的防火墙已经开放了 Elasticsearch 的默认端口 9200。如果你使用的是云服务器,也需要在安全组中开放该端口。

你可以通过在浏览器中输入 http://<你的服务器IP>:9200 来测试是否能够正常访问 Elasticsearch。如果配置正确,你应该能看到如下 Elasticsearch 的欢迎页面。

欢迎页面

二、本地 Python 连接 Elasticsearch

在确保服务器端配置无误后,接下来我们在本地使用 Python 连接到 Elasticsearch。首先,你需要安装 elasticsearch Python 客户端库:

pip install elasticsearch 

1. 连接 Elasticsearch

以下是连接到 Elasticsearch 的示例代码:

from elasticsearch import Elasticsearch # 连接到 Elasticsearch,替换为实际的 IP 地址和密码 es = Elasticsearch('http://192.168.111.199:9200', basic_auth=('elastic','Elastic_j625sz'))# 检查连接if es.ping():print('连接成功')else:print('连接失败')

在上述代码中,basic_auth 参数用于传递用户名和密码。如果你的 Elasticsearch 没有设置密码,可以省略该参数。

image-kkdu.png

2. 索引操作

# 创建索引  es.indices.create(index="my_index")# 删除索引  es.indices.delete(index="my_index")# 检查索引是否存在  es.indices.exists(index="my_index")
索引操作

3. 文档操作

连接成功后,我们可以开始进行数据存储和搜索操作。以下是一个创建索引并插入数据的示例:

# 添加文档 doc1 ={"title":"测试文档1","content":"这是一个测试文档1","timestamp":"2024-12-07"} doc2 ={"title":"测试文档2","content":"这是一个测试文档2","timestamp":"2024-12-01"}# 指定ID插入 es.index(index="my_index",id="1", document=doc1)# 自动生成ID插入 es.index(index="my_index", document=doc2)# 获取文档 result = es.get(index="my_index",id="1")print(result)# 更新文档 update_doc ={"doc":{"title":"更新后的标题"}} es.update(index="my_index",id="1", body=update_doc)print(es.get(index="my_index",id="1"))# 删除文档 es.delete(index="my_index",id="1")
文档操作

4. 搜索内容

接下来,我们可以通过搜索来查找我们存储的数据。

在这之前,定义一个打印文档的方法:

def print_doc(result): for hit in result['hits']['hits']: print(f"文档ID: {hit['_id']}") print(f"得分: {hit['_score']}") print(f"文档内容: {json.dumps(hit['_source'], indent=2, ensure_ascii=False)}") print("-" * 50) 

下面是常用的搜索方式:

# 简单搜索 query ={"query":{"match":{"title":"测试"}}} result = es.search(index="my_index", body=query) print_doc(result)# 复杂搜索(bool查询) query ={"query":{"bool":{"must":[{"match":{"title":"测试"}},{"range":{"timestamp":{"gte":"2024-01-01"}}}]}}} result = es.search(index="my_index", body=query) print_doc(result)# 分页查询 query ={"query":{"match_all":{}},"from":0,# 从第几条开始"size":10# 返回多少条} result = es.search(index="my_index", body=query) print_doc(result)

在这个示例中,我们搜索了包含“测试”这个词的文档,并打印出搜索结果。

搜索内容

5. 聚合查询

# 聚合查询示例  query ={"aggs":{"popular_titles":{"terms":{"field":"title.keyword","size":10}}}} result = es.search(index="my_index", body=query)
聚合查询

6. 批量操作

# 批量插入  actions =[{"_index":"my_index","_source":{"title":"文档1"}},{"_index":"my_index","_source":{"title":"文档2"}},]from elasticsearch.helpers import bulk bulk(es, actions)
批量操作

三、注意事项

在使用 Elasticsearch 时,有几个注意事项需要牢记:

  1. 确保 Elasticsearch 服务正在运行:在进行任何操作之前,确保 Elasticsearch 服务已经启动。
  2. 检查网络连接:确保本地机器与服务器之间的网络连接畅通。
  3. 认证信息:如果 Elasticsearch 配置了认证,连接时必须提供正确的用户名和密码。
  4. 安全措施:在生产环境中,建议配置合适的安全措施,例如使用 HTTPS 和防火墙规则。
  5. 记得在完成操作后关闭连接:es.close()

四、故障排除

如果在连接或操作 Elasticsearch 时遇到问题,可以尝试以下方法进行排查:

  • 检查 Elasticsearch 的日志文件,查看是否有错误信息。
  • 确认 elasticsearch.yml 配置文件中的设置是否正确,并重启 Elasticsearch 服务以应用更改。

使用 telnet 测试端口连通性:

telnet <你的服务器IP>9200

结论

通过以上步骤,你应该能够成功使用 Python 连接到 Elasticsearch,并进行基本的文档存储和搜索操作。Elasticsearch 提供了强大的搜索能力,结合 Python 的灵活性,可以帮助你构建高效的数据检索系统。希望这篇文章能帮助你更好地理解如何使用 Python 操作 Elasticsearch。

Read more

基于YOLOv8/YOLOv10/YOLOv11/YOLOv12与SpringBoot的跌倒检测系统(千问+DeepSeek智能分析+web交互界面+前后端分离+YOLO数据)

基于YOLOv8/YOLOv10/YOLOv11/YOLOv12与SpringBoot的跌倒检测系统(千问+DeepSeek智能分析+web交互界面+前后端分离+YOLO数据)

项目摘要 本项目旨在设计并实现一个高效、智能且用户友好的基于多版本YOLO深度学习模型与SpringBoot Web框架的实时跌倒检测系统。随着全球老龄化社会的加速到来,老年人在日常生活中发生跌倒的风险日益增高,及时、准确地检测跌倒事件对于保障其生命安全与健康具有重大社会意义。传统监控或穿戴式设备存在隐私侵扰、用户体验不佳或漏报率高等局限。因此,本项目融合了当前前沿的计算机视觉技术与现代Web开发架构,构建了一个集智能分析、实时监控、数据管理与远程交互于一体的综合性解决方案。 系统的核心检测引擎采用了性能卓越的YOLO系列目标检测算法,并创新性地集成了YOLOv8、YOLOv10、YOLOv11及YOLOv12四种最新版本模型,为用户提供了灵活、可对比的算法选择,以适应不同的精度与速度需求。模型在精心标注的自定义数据集上进行训练与验证,该数据集包含 ‘fallen’(已跌倒)、‘falling’(正在跌倒)和‘stand’(站立/正常) 三个关键类别,共计3,888张图像(训练集3,594张,验证集294张),确保了系统对跌倒过程动态的精确识别能力。 系统后端采用SpringB

By Ne0inhk

node.js下载、安装、设置国内镜像源(永久)(Windows11)

目录 * node-v20.18.0-x64 * 工具 * 下载 * 安装 * 设置国内镜像源(永久) node-v20.18.0-x64 工具 系统:Windows 11 下载 1. 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64 下载完成 如图选择 Windows、x64、v20.18.0 (LTS),点击下载 安装 next、next、Install、Finish 自定义安装地址,我安到了F:Program Files odejs I accept打勾,next next

By Ne0inhk

Spring IOC 和 AOP 完全详解:从入门到精通

Spring IOC 和 AOP 完全详解:从入门到精通 📝 博客简介:本文将深入浅出地讲解Spring框架的两大核心特性——IOC(控制反转)和AOP(面向切面编程)。适合Spring初学者和准备面试的同学阅读。 🎯 知识目标:理解IOC和AOP的概念、实现机制、应用场景,并掌握依赖注入和反射的原理。 📋 目录 * 一、Spring IOC(控制反转)详解 * 二、Spring AOP(面向切面编程)详解 * 三、反射机制详解 * 四、实战代码演示 * 五、常见面试问题汇总 一、Spring IOC(控制反转)详解 1.1 什么是IOC? 📖 概念解释 IOC(Inversion of Control,控制反转) 是一种设计原则,

By Ne0inhk
黑马点评完整代码(RabbitMQ优化)+简历编写+面试重点 ⭐

黑马点评完整代码(RabbitMQ优化)+简历编写+面试重点 ⭐

简历上展示黑马点评 完整代码地址 微服务学成在线项目 前言 当初就是当作一个学习笔记和个人面试记录发的,没想到这么多人收藏浏览,还是感慨学Java的人确实多啊。 适合什么人看呢,我仅仅说说我个人的理解,因为我现在也是个经历秋招的双非学生。 1.初学者学习完Redis基础,想来个实战,黑马点评还是特别好的一个项目,基本包含了所有数据类型的运用和redis其他功能的扩展,这篇文章可以带你提炼重点,很好的走下流程。 2.但大部分人是冲着找实习和秋招去的,像我这种学历不高的秋招就不要写黑马点评了,即使包装,也会很容易看出来,我找实习的时候就被面试官问到这是不是黑马点评过,我们可以把其中的闪光点迁移到你找的其他项目中,比如缓存穿透雪崩击穿的解决方法,redisson分布式锁解决一人一单,这种在大多项目中都可以添加,自圆其说就行。 3.对于找实习的像大二,大三上的,想找个小厂试试手垂直向上升的,可以吃透它,面试官问你遇到的困难或者是你觉得难点,就可以重点讲一人一单这个解决方法和流程,越详细越好。 4.前提是大家不用直接用这套模板,太多人用了,这也是我从网上找的别人的,巧用AI让它改改项

By Ne0inhk