Python操作ES集群API

news2024/12/26 23:16:04

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

学习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/2107734.html

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

相关文章

光明乳业以“轻”礼庆团圆!第七届莫斯利安保加利亚国际酸奶文化节圆满落幕

近日,第七届莫斯利安保加利亚国际酸奶文化节圆满落下帷幕。今年国际酸奶文化节恰逢中秋佳节之际,光明莫斯利安联合上海博物馆,以其缂丝馆藏《灵仙祝寿图》为灵感,推出了一系列联名限定产品和周边,寓意健康团圆长长久久…

Elastic Stack--ES的DSL语句查询

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记: 最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—Elastic…

工业边缘网关:智能制造的实时数据枢纽-天拓四方

在工业4.0的浪潮中,工业边缘网关已成为智能制造和工业物联网(IIoT)领域的关键技术。作为连接工业现场设备与云端平台的桥梁,边缘网关实现了数据的实时采集、处理和传输,为企业的生产管理和决策提供了重要支持。本文将重…

如何查看Pod的Container资源占用情况

云原生学习路线导航页(持续更新中) 方法一:直接查看pod的资源占用 kubectl top pods ${pod-name} -n ${ns} 方法二:通过运行的进程,查看pod的某个容器资源占用 1.找到pod所在node容器号:kubectl descri…

【Fastapi】使用Toml作为配置文件格式

【Fastapi】使用Toml作为配置文件格式 giteegithubtoml介绍我为什么用 toml作为配置文件格式具体使用(没提到的请参考[官网](https://toml.io/cn/v1.0.0))文件格式代码中使用 gitee https://gitee.com/zz1521145346/fastapi_frame.git github https:/…

从羊城杯docCrack学习恶意宏

前言 一道涉及恶意宏的逆向题目,不算难。 知识点 关于OLE文件 office文档(如.doc、.ppt、.xls等)其实都是复合文档(OLE),该文件格式全称为OLE复合文档格式,它允许多个数据流和存储在单个文件…

昂科烧录器支持ALLYSTAR华大北斗的GNSS芯片HD8020

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中ALLYSTAR华大北斗的GNSS芯片HD8020已经被昂科的通用烧录平台AP8000所支持。 HD8020是一款能够实现单芯片解决方案,满足位置感知、物流运输等导航定位需求的SOC芯片…

java Abstract Queued Synchronizer

AbstractQueuedSynchronizer(简称 AQS)是 Java 中用于实现锁和同步器的一个基础框架,位于 java.util.concurrent.locks 包中。它提供了一种基于 FIFO(先进先出)队列的机制,帮助构建多线程之间的同步工具&am…

谈一谈MVCC

一 MVCC的定义 MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库管理系统(DBMS)中的并发控制方法,它允许数据库读写操作不加锁地并发执行,从而提高了数据库系统的并发性…

Redis主从和哨兵

目录 开启主从关系(两种) 数据同步原理 全量同步 增量同步 哨兵的作用和原理 服务状态监控 故障转移步骤 开启主从关系(两种) 修改配置文件(永久生效): 在redis.conf中添加一行配置&#…

从PDF到CAD:四大必备转换工具推荐!

无论是建筑设计师还是机械工程师,都面临着将旧图纸或扫描件转换成可编辑CAD文件的任务。这不仅是为了提高工作效率,更是为了适应数字化转型的大趋势。今天,我们就来探索几款高效且用户友好的解决方案! 福昕PDF转换大师&#xff0…

vue3 antdv3 TypeError: date1.isAfter is not a function的解决

1、先上个报错的图: 2、这个一看是因为date报错的问题,这里面用了TimeRangePicker. const TimeRangePicker TimePicker.TimeRangePicker; import dayjs, { Dayjs } from dayjs; let time1 [dayjs(dayjs(new Date()).format(YYYY-MM-DD) record.…

conda换源是什么?

换源对于我们在国内的python使用者来说是非常有必要的,之前讲了pip如何换源。 pip更换为国内镜像源的步骤,为什么要更换镜像源 那现在讲一下conda如何换源。 conda换源(清华源) 有时候,conda虽然和pip共用一个本地…

Stable Diffusion抠图插件爬坑经历,StableDiffusion实操案例(附整合资料)

今天给大家分享使用后期处理插件stable-diffusion-webui-rembg实现抠图功能。 👉AI绘画必备工具👈 温馨提示:篇幅有限,已打包文件夹,获取方式在:文末 👉AI绘画基础速成进阶使用教程&#x1f…

Synchronized、Reetrantlock

一、线程安全问题 多线程操作共享变量,由于该共享变量不是立刻可见的,读写不具备原子性,所以存在线程安全问题 二、售票案例 模拟售票案例,库存有10张票,有3个窗口(3个子线程)分别去卖,直到库存为0&#…

室内导航定位系统在医院的应用与部署

随着医疗技术的飞速发展,医院规模日益扩大,科室布局日趋复杂,患者及家属在寻找目标科室、病房或检查室时常常感到迷茫。为解决这一问题,室内导航定位系统应运而生,并逐渐成为现代医院智慧化建设的重要组成部分。接下来…

vue3 VueUse useElementVisibility 来监听某一个元素或者div是否在当前视口viewport中可见。

1、先上一个图&#xff1a; 2、安装vueuse/core pnpm add vueuse/core 3、新建一个组件&#xff1a; <script setup lang"ts"> import { ref, watch } from "vue"; import { useElementVisibility } from "vueuse/core";const target re…

AI短剧时代来临,用ai生成短剧的工具?AI文字生成短视频工具系统搭建开发,AI前景趋势怎么样?

前言&#xff1a; AI短剧是近期来随着人工智能技术的发展而兴起的一种新型影视内容形式。它利用AI技术&#xff0c;如AIGC&#xff08;生成式人工智能&#xff09;等&#xff0c;进行剧本创作、角色设计、场景构建、特效制作等&#xff0c;从而创作出全新的短剧作品。 一、AI…

Depop被封原因:IP禁令后如何重新创建账户?

Depop 是一个受欢迎的在线市场&#xff0c;帮助用户在全球范围内买卖服装、时尚物品和其他配饰。然而&#xff0c;与其他在线平台一样&#xff0c;Depop 有每个用户必须遵守的准则和规则&#xff0c;以确保市场安全公平。其中一条规则是&#xff0c;您不得拥有多个帐户&#xf…

免费分享:2020年全国道路网(分级)矢量数据

数据详情 全国道路网&#xff08;分级&#xff09;矢量数据 数据属性 数据名称&#xff1a;2020年全国道路网&#xff08;分级&#xff09;矢量数据 道路类型分类&#xff1a;高速、国道、省道、铁路、县道、乡道 道路级别&#xff1a;一级、二级、三级、四级 空间位置&am…