Python操作ES集群API(增删改查等)

news2024/9/20 0:36:01

  前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

学习B站博主教程笔记: 

最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—ElasticSearch+Logstash+Kibana精讲_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1VMW3e6Ezk/?spm_id_from=333.1007.tianma.1-1-1.click&vd_source=e539f90574cdb0bc2bc30a8b5cb3fc00

1、创建索引

 #!/usr/bin/env python3
 ​
 from elasticsearch import Elasticsearch
 ​
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 msg_body = {
     "settings": {
         "index": {
             "number_of_replicas": "0",
             "number_of_shards": "5"
         }
     },
     "mappings": {
         "properties": {
             "ip_addr": {
                 "type": "ip"
             },
             "name": {
                 "type": "text"
             },
             "id": {
                 "type": "long"
             },
             "hobby": {
                 "type": "text"
             },
             "email": {
                 "type": "keyword"
             }
         }
     },
     "aliases": {
         "cluster-elstaicstack-linux-python": {},
         "cluster-linux-python": {}
     }
 }
 ​
 result = es.indices.create(index="cluster-linux-2024", body=msg_body)
 print(result)
 ​
 es.close()

2、写入单个文档

 #!/usr/bin/env python3
 ​
 import sys
 from elasticsearch import Elasticsearch
 ​
 # 设置字符集,兼容Python2
 reload(sys)
 sys.setdefaultencoding('utf-8')
 ​
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 # 写入单个文档
 msg_body = {
     "name": "Jason Yin",
     "ip_addr": "120.53.104.136",
     "blog": "https://blog.yinzhengjie.com/",
     "hobby": ["k8s", "docker", "elk"],
     "email": "yinzhengjie@qq.com",
     "id": 10086,
 }
 ​
 ​
 result = es.index(index="cluster-linux-2024", doc_type="_doc", body=msg_body)
 print(result)
 ​
 es.close()

3、写入多个文档

 #!/usr/bin/env python3
 ​
 import sys
 from elasticsearch import Elasticsearch
 from elasticsearch.helpers import bulk
 ​
 # 设置字符集,兼容Python2
 reload(sys)
 sys.setdefaultencoding('utf-8')
 ​
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 # 批量写入多个文档
 doc2 = {
     "id": 10010,
     "name": "老男孩",
     "age": 45,
     "hobby": ["下棋", "抖音", "思想课"],
     "ip_addr": "10.0.0.101",
     "email": "oldboy@qq.com"
 }
 ​
 doc3 = {
     "id": 10011,
     "name": "李导",
     "age": 32,
     "hobby": ["三剑客", "打枪"],
     "email": "lidao@qq.com",
     "ip_addr": "10.0.0.201"
 }
 ​
 many_doc = [doc2, doc3]
 ​
 write_number, _ = bulk(es, many_doc, index="cluster-linux-2024")
 print(write_number)
 ​
 es.close()

4、全量查询

 #!/usr/bin/env python3
 ​
 from elasticsearch import Elasticsearch
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 # 全量查询
 result = es.search(index="cluster-linux-2024")
 print(result)
 print(result["hits"])
 print(result["hits"]["hits"])
 print(result["hits"]["hits"][0]["_source"])
 print(result["hits"]["hits"][0]["_source"]["name"])
 print(result["hits"]["hits"][0]["_source"]["hobby"])
 ​
 es.close()

5、查看多个文档

 #!/usr/bin/env python3
 ​
 import sys
 from elasticsearch import Elasticsearch
 ​
 # 设置字符集,兼容Python2
 reload(sys)
 sys.setdefaultencoding('utf-8')
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 # 获取多个文档
 doc1 = {'ids': ["5gIk24AB2f3QZVpX1AxN", "5AIk24AB2f3QZVpX1AxN"]}
 res = es.mget(index="cluster-linux-2024", body=doc1)
 print(res)
 print(res['docs'])
 ​
 es.close()

6、DSL查询

 #!/usr/bin/env python3
 ​
 import sys
 from elasticsearch import Elasticsearch
 ​
 # 设置字符集,兼容Python2
 reload(sys)
 sys.setdefaultencoding('utf-8')
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 # DSL语句查询
 dsl = {
     "query": {
         "match": {
             "hobby": "王岩"
         }
     }
 ​
 }
 ​
 # DSL语句查询
 # dsl= {
 #     "query": {
 #         "bool": {
 #             "should": [
 #                 {
 #                     "match": {
 #                         "type": "pets"
 #                     }
 #                 },
 #                 {
 #                     "match": {
 #                         "type": "lunxury"
 #                     }
 #                 }
 #             ],
 #             "minimum_should_match": 1,
 #             "filter": {
 #                 "range": {
 #                     "price": {
 #                         "gt": 1500,
 #                         "lt": 2500
 #                     }
 #                 }
 #             }
 #         }
 #     },
 #     "sort": {
 #         "price": {
 #             "order": "desc"
 #         }
 #     },
 #     "_source": [
 #         "title",
 #         "price",
 #         "producer"
 #     ]
 # }
 #
 # res = es.search(index="shopping",body=dsl)
 # print(res)
 res = es.search(index="cluster-linux-2024", body=dsl)
 print(res)
 ​
 es.close()

7、查看索引是否存在

 #!/usr/bin/env python3
 ​
 from elasticsearch import Elasticsearch
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 # 判断索引是否存在
 print(es.indices.exists(index="cluster-shopping"))
 ​
 es.close()

8、修改文档

 #!/usr/bin/env python3
 ​
 from elasticsearch import Elasticsearch
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 new_doc = {'doc': {"hobby": ['下棋', '抖音', '思想课', "Linux运维"], 'address': '中华人民共和国北京市昌平区沙河镇老男孩教育'}}
 ​
 # 更新文档
 res = es.update(index="cluster-linux-2024", id='5gIk24AB2f3QZVpX1AxN', body=new_doc)
 print(res)
 ​
 es.close()

9、删除单个文档

 #!/usr/bin/env python3
 ​
 from elasticsearch import Elasticsearch
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 ​
 # 删除单个文档
 result = es.delete(index="cluster-linux-2024", id="5gIk24AB2f3QZVpX1AxN")
 print(result)
 ​
 es.close()

10、删除索引

 #!/usr/bin/env python3
 ​
 from elasticsearch import Elasticsearch
 es = Elasticsearch(['192.168.1.10:9200', '192.168.1.11:9200', '192.168.1.12:9200'])
 # 删除索引
 result = es.indices.delete(index="cluster-linux-2024")
 print(result)
 ​
 es.close()

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

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

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

相关文章

Vue组件:插槽的使用

在实际开发中,子组件往往只提供基本的交互功能,而内容是有父组件来提供的。为此,Vue.js 提供了一种混合父组件内容和子组件模板的方式,这种方式称为内容分发。 1、基本用法 Vue.js 参照当前 Web Components 规范草案实现了一套内…

和 InternLM 解锁“谁是卧底”新玩法

本文来自社区投稿,作者LangGPT联合发起人、东北大学在读博士生王明 在大模型技术日益普及的今天,AI 的应用已经渗透到各个领域,带来了无数创新和乐趣。今天,我们将一起探索如何搭建一个 AI 版的“谁是卧底”游戏。通过 InternStud…

【Unity基础】Input中GetAxis和GetAxisRaw的区别

一句话描述:GetAxis使用了平滑过渡,而GetAxisRaw是直接改变。 在Unity中,Input.GetAxisRaw 和 Input.GetAxis 都用于获取输入设备的轴向输入(例如键盘、鼠标或手柄的摇杆),但它们的工作方式和返回值有细微…

GPU 服务器性能评估:多维度深度探索

在深度学习的浩瀚宇宙中,GPU 服务器犹如一颗璀璨的星辰,以其无与伦比的计算能力和效率引领着技术进步的浪潮。为了充分挖掘这一强大工具的潜力,我们需深入探寻其性能评估的奥秘,这不仅仅是对单一指标的简单堆砌,而是从…

从虚拟现实到元宇宙:Facebook引领未来社交的下一步

随着科技的迅猛发展,社交媒体正在经历一场深刻的变革。从最初的文本和图片交流,到如今的沉浸式虚拟现实(VR)和即将到来的元宇宙,社交互动的方式正在发生根本性的变化。作为行业领军者,Facebook(…

3GPP协议入门——物理层基础(一)

1. 频段/带宽 NR指定了两个频率范围,FR1:通常称Sub 6GHz,也称低频5G;FR2:通常称毫米波(Millimeter Wave),也称高频5G。 2. 子载波间隔 NR中有15kHz,30kHz,6…

数据库类型有哪些?

根据存储方式的不同,数据库可以分为不同种类。每种类型的数据库,都有各自使用场景以及不同的产品。 ​ 关系型数据库 关系型数据库(RDBMS)基于关系模型,通过表(Table)的形式来组织数据&#xf…

利士策分享,如何规划多彩的大学生活?

利士策分享,学习规划多彩的大学生活 踏入大学,如同开启一场充满未知与可能的旅程。 为了让这段旅程不仅充满学术的熏陶,还洋溢着生活的多彩与人际的和谐,我们需要精心规划,积极行动。 一、多彩规划:点亮大学…

双指针的运用

一、双指针 双指针 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 1.1 对撞指针:⼀般⽤于顺序结构中,也称左右指针。 • 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始&#xff…

一文揭秘:从零开发一套中小型医院的云HIS系统,需要多少开发成本?

从零开发一套中小型的云HIS(医院信息系统)系统,首先要组建团队,包括招聘、培训、设备购置,然后要经历需求分析、系统设计、编码、测试等多个阶段,这会消耗大量的时间,其开发成本会受到多种因素的…

《凡人歌》重塑现实主义爆款,正午阳光终于“杀”回来了

2024年的现实主义爆款,出自正午阳光之手。 今年剧集市场一个明显的变化在于,最贴近时代生活、最有“爆款潜质”的现实主义题材电视剧的缺位。根据云合数据,截止到2024年9月,年榜前十中没有一部现实主义大剧,古装剧却多…

在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境

目录 在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境 一、为什么要用后端程序操作Docker 二、安装Docker 1、安装Docker 2、启动Docker 三、DockerClient与CMD操作Docker的区别 四、干货!如何使用DockerClient实现在线编程…

通过信息架构提升商业智能:实现数据驱动创新的策略与方法

拥抱数据驱动时代 在当前的数字化转型浪潮中,数据已成为企业最重要的资产之一。全球范围内的网络巨头通过精细的数据管理和分析,已成功颠覆了传统行业。这些企业的成功不仅源于他们掌握了大量数据,还因为他们能有效地利用这些数据来做出精准…

研一小白读论文记录,计算机视觉,Transformer

论文是IEEE收录的一篇论文《CrossFormer: A Versatile Vision Transformer Hinging on Cross-Scale Attention》(《基于跨尺度自注意力机制的多功能视觉Transformer》) 泛读完之后最大的感悟有以下几点: 1、文章在实验的结果中呈现了大量的…

Getty Images推AI训练样本:3750张高质量照片免费开放

近日,全球领先的商业图库Getty Images发布了一项重大决策,宣布将为AI开发者提供一份包含3750张高分辨率照片的免费训练数据集。这份详尽的数据集覆盖了商业、教育、医疗健康、运动健身、物品物体、插图图标等15个不同领域,目的在于助力AI技术…

unity UGUI高性能飘字解决方案(对象池+合并网格)

本方案仅供参考 从需求出发 游戏类型:微信小游戏 帧数限定:60 已知的几种方案: 1:场上只存在一个mesh,每帧把所有字绘制到一个mesh。 优点:每帧都重绘,高度定制化,可以随意添加、删除。 …

HTTP状态码解析:在Haskell中判断响应成功与否

在互联网的世界里,HTTP状态码是服务器与客户端之间通信的一种语言。它们告诉我们请求是否成功,或者遇到了什么问题。在进行网络编程时,正确地解析和处理这些状态码是至关重要的。本文将探讨HTTP状态码的基本概念,并展示如何在Hask…

KUKA中级学习4:修改软件中机器人名字,纠正示教器时间,下载备份文件进示教器

这里写目录标题 一、修改机器人名字1.1、程序安装下载二、示教器时间修改2.1、时间修改,示教器全英文显示三、下载备份文件 一、修改机器人名字 1.1、程序安装下载 选下面这个 二、示教器时间修改 2.1、时间修改,示教器全英文显示 三、下载备份文件 …

FancyVideo环境搭建推理

引子 很少关注360开源的代码,最近360AI团队开源了最新视频模型FancyVideo,据说RTX3090可跑。可以在消费级显卡 (如 GeForce RTX 3090) 上生成任意分辨率、任意宽高比、不同风格、不同运动幅度的视频,其衍生模型还能够完成视频扩展、视频回溯…

springboot+vue+mybatis计算机毕业设计网上购物系统+PPT+论文+讲解+售后

本文首先实现了网上购物系统设计与实现管理技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模…