Python连接和操作Elasticsearch详细指南

news2025/2/23 2:17:12

Python连接和操作Elasticsearch详细指南

  • 一、服务器端配置
    • 1. 修改 Elasticsearch 配置文件
    • 2. 开放防火墙端口
  • 二、本地 Python 连接 Elasticsearch
    • 1. 连接 Elasticsearch
    • 2. 索引操作
    • 3. 文档操作
    • 4. 搜索内容
    • 5. 聚合查询
    • 6. 批量操作
  • 三、注意事项
  • 四、故障排除
  • 结论

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

一、服务器端配置

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

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

1. 修改 Elasticsearch 配置文件

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

network.host: 0.0.0.0
http.port: 9200
discovery.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 时遇到问题,可以尝试以下方法进行排查:

  • 使用 telnet 测试端口连通性:

    telnet <你的服务器IP> 9200
    
  • 检查 Elasticsearch 的日志文件,查看是否有错误信息。

  • 确认 elasticsearch.yml 配置文件中的设置是否正确,并重启 Elasticsearch 服务以应用更改。

结论

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

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

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

相关文章

获得日志记录之外的新视角:应用程序性能监控简介(APM)

作者&#xff1a;来自 Elastic David Hope 日志记录领域即将发生改变。在这篇文章中&#xff0c;我们将概述从单纯的日志记录到包含日志、跟踪和 APM 的完全集成解决方案的推荐流程。 通过 APM 和跟踪优先考虑客户体验 企业软件开发和运营已成为一个有趣的领域。我们拥有一些非…

Python - 面向对象;类和对象;方法属性;init,self;魔法方法;析构方法;函数方法区别(六)

一、面向对象编程&#xff08;OOP&#xff09; 定义 面向过程(Procedure Oriented Programming, POP)是一种程序设计范式&#xff0c;主要关注的是实现功能的步骤&#xff0c;设计时模块化和流程化。面向过程编程是一种以过程为中心的编程方式&#xff0c;它将问题分解成一系…

源码编译安装MySQL

MySQL相应版本的tar包下载 在5.7的版本的MySQL编译安装的时候&#xff0c;需要依赖C语言的库文件【boost】&#xff0c; 如上图所示&#xff0c;如果你使用第一个MySQL的tar包&#xff0c;还需要去网上去下载boost即C语言的库文件&#xff0c;但是第二个tar包就既包含MySQL的源…

关于Kubernetes(K8S)认证含金量?

Kubernetes越来越流行&#xff0c;目前它是市场上最佳的容器编排工具之一&#xff0c;也是运维工程师必备的技能之一。 大厂都在用K8S&#xff08;就业行情&#xff09; 虽说今年的大环境不是很好&#xff0c;但是从招聘数据来看&#xff0c;K8S岗位薪资不降反而上涨不…

Linux / Windows | ping IP + Port 测试

注&#xff1a;本文为 “Linux / Windows | ping IP Port 测试端口通畅” 相关文章合辑。 未整理去重。 windows 如何确认服务器上程序端口是否正常&#xff08;ping、tcping&#xff09; 三希已于 2023-05-22 18:08:06 修改 方式 1&#xff1a;ping 命令 ping 命令说明 p…

C++打造局域网聊天室第七课: Socket编程初步2

文章目录 前言一、Socket的API函数二、服务端建立Socket步骤总结 前言 C打造局域网聊天室第七课&#xff1a; Socket编程初步2 一、Socket的API函数 接着上一课的内容&#xff0c;我们在chartroom.cpp中找到如下位置 插入断点&#xff0c;运行 运行到断点处后&#xff0c;按…

vue-router路由传参的两种方式(params 和 query )

一、vue-router路由传参问题 1、概念&#xff1a; A、vue 路由传参的使用场景一般应用在父路由跳转到子路由时&#xff0c;携带参数跳转。 B、传参方式可划分为 params 传参和 query 传参&#xff1b; C、而 params 传参又可分为在 url 中显示参数和不显示参数两种方式&#x…

Docker Compose应用实战

文章目录 1、使用Docker Compose必要性及定义2、Docker Compose应用参考资料3、Docker Compose应用最佳实践步骤1_概念2_步骤 4、Docker Compose安装5、Docker Compose应用案例1_网站文件准备2_Dockerfile文件准备3_Compose文件准备4_使用docker-compose up启动容器5_访问6_常见…

el-table组件树形数据修改展开箭头

<style lang"scss" scoped> ::v-deep .el-table__expand-icon .el-icon-arrow-right:before {content: ">"; // 箭头样式font-size: 16px; }::v-deep .el-table__expand-icon{ // 没有展开的状态background-color: rgba(241, 242, 245, 1);color:…

5.2 JavaScript 案例 - 轮播图

JavaScript - 轮播图 文章目录 JavaScript - 轮播图基础模版一、刷新页面随机轮播图案例二、轮播图 定时器版三、轮播图完整版 基础模版 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"…

MongoDB与阿里云庆祝合作五周年,展望AI赋能新未来

12月3日&#xff0c;在印尼举行的阿里云合作伙伴大会2024上&#xff0c;MongoDB荣膺阿里云“2024技术创新成就奖”&#xff0c;该奖项旨在表彰与阿里云保持长期稳定合作&#xff0c;通过深度技术融合&#xff0c;在产品技术创新、行业区域深耕等领域取得卓越成就的伙伴。自2019…

数据结构(Queue队列)

前言&#xff1a; 在计算机科学中&#xff0c;数据结构是构建高效算法和程序的基础&#xff0c;而队列&#xff08;Queue&#xff09;作为一种经典的线性数据结构&#xff0c;具有重要的地位。与栈&#xff08;Stack&#xff09;不同&#xff0c;队列遵循“先进先出”&#xf…

EDA - Spring Boot构建基于事件驱动的消息系统

文章目录 概述事件驱动架构的基本概念工程结构Code创建事件和事件处理器创建事件总线创建消息通道和发送逻辑创建事件处理器消息持久化创建消息发送事件配置 Spring Boot 启动类测试消息消费运行项目 概述 在微服务架构和大规模分布式系统中&#xff0c;事件驱动架构&#xff…

仿iOS日历、飞书日历、Google日历的日模式

仿iOS日历、飞书日历、Google日历的日模式&#xff0c;24H内事件可自由上下拖动、自由拉伸。 以下是效果图&#xff1a; 具体实现比较简单&#xff0c;代码如下&#xff1a; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…

软考高级架构 - 10.5 软件架构演化评估方法

10.4 软件架构演化原则总结 本节提出了18条架构演化的核心原则&#xff0c;并为每条原则设计了简单而有效的度量方法&#xff0c;用于从系统整体层面提供实用信息&#xff0c;帮助评估和指导架构演化。 演化成本控制&#xff1a;成本小于重新开发成本&#xff0c;经济高效。进…

DocFlow票据AI自动化处理工具:出色的文档解析+抽取能力,提升企业文档数字化管理效能

目录 财务应付 金融信贷业务 近期&#xff0c;DocFlow票据自动化产品正式上线。DocFlow是一款票据AI自动化处理工具&#xff0c;支持不同版式单据智能分类扩展&#xff0c;可选功能插件配置流程&#xff0c;满足多样业务场景。 随着全球化与信息化进程&#xff0c;企业的文件…

C# 探险之旅:第二节 - 定义变量与变量赋值

欢迎再次踏上我们的C#学习之旅。今天&#xff0c;我们要聊一个超级重要又好玩的话题——定义变量与变量赋值。想象一下&#xff0c;你正站在一个魔法森林里&#xff0c;手里拿着一本空白的魔法书&#xff08;其实就是你的代码编辑器&#xff09;&#xff0c;准备记录下各种神奇…

有道云笔记批量导出

前言 最近使用有道云笔记遇到打开过慢&#xff0c;导致笔记丢失&#xff0c;需要会员才能找回之前笔记问题。 决定改用思源&#xff0c;程序中的格式比较难于通过复制保留&#xff0c;即使导出成word 或者pdf&#xff0c;需要一个专门工具导出成Markdown格式&#xff0c;批量…

离线无网环境中基于OpenEuler的everything ISO安装软件

文章目录 1.创建挂载点 2.挂载 ISO 文件: 3.配置 YUM 源 4.清理 YUM 缓存并生成新的缓存: 5.使用 YUM 安装软件包 要在 OpenEuler 系统中挂载ISO &#xff08;下载地址&#xff1a;https://repo.openeuler.openatom.cn/openEuler-20.03-LTS/ISO/x86_64/&#xff09;并使用…

2024最新树莓派4b安装ubuntu20.04.5-server版本全流程解决方案:从烧录到配置桌面到联网!!!

准备工作 硬件工具 树莓派4b&#xff0c;32GSD卡&#xff0c;读卡器 软件工具 ubuntu20.04.5镜像&#xff0c;SD卡格式化工具&#xff0c;烧录软件&#xff0c;远程连接工具。 下面是我通过百度网盘分享的文件&#xff1a;树莓派4bubuntu20.04链接&#xff1a;https://pan…