ELK系列(十四)、在Python中操作ES,创建/查询/插入/更新/删除

Python语言,ES(Elasticsearch)基础查询 Python语言,ES(Elasticsearch)基础查询。 阅读详情

前面我们介绍了在kibana,curl,es-head,hive中对es的操作,本篇介绍如何使用python操作ES。

ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0

ELK系列(二)、在Kibana中使用RESTful操作ES库

ELK系列(三)、安装Logstash插件及打包离线安装包

ELK系列(四)、Logstash读取nginx日志写入ES中

ELK系列(五)、Logstash修改@timestamp时间为日志的产生时间

ELK系列(六)、修改Nginx日志为Json格式并使用Logstash导入至ES

ELK系列(七)、Filebeat+Logstash采集多个日志文件并写入不同的ES索引中

ELK系列(八)、使用Filebeat+Redis+Logstash收集日志数据

ELK系列(九)、配置ES和Kibana的用户密码

ELK系列(十)、ES中文分词器IK插件安装和配置远程词库热加载

ELK系列(十一)、ElasticSearch7.7.0插件es-head安装及使用

ELK系列(十二)、使用SQL查询ElasticSearch7.7.0

ELK系列(十三)、在Hive中操作ES的索引数据,创建/查询/更新/插入

----------------------------------------在Python中操作ES----------------------------------

环境

使用pip安装elasticsearch包:

pip install elasticsearch==7.7.0

使用

引包

这里分别介绍使用elasticsearch包和request包查询ES的方式: 

使用request包可以补充elasticsearch包里不方便或者还没有实现的功能,作为对elasticsearch包的一个补充,建议组合使用。

from elasticsearch import Elasticsearch
import requests

ElasticSearch包

 获取ES对象


#获取es连接
def get_es_engine(host,port,user=None,pwd=None):
    if user and pwd:
        es = Elasticsearch(host+':'+str(port), http_auth=(user, pwd), maxsize=15)  # 有XPACK安全认证的ES集群
    else:
        es = Elasticsearch(host+':'+str(port), maxsize=15)#无安全认证的集群
    return es

状态

es.ping()
es.info()

 

查询

#查单个记录,指定index,type,id
es.get(index='test2',id=1,doc_type='_doc')

#根据条件查询,body里是DSL
bd={
  "query":{
    "bool":{
      "should": [
        {
          "match_phrase_prefix":{
            "email":"yikai"
          }
        }
      ]
    }
  }
}
es.search(body=bd,index='test2')

 

#查看索引数据是否存在
es.exists(index='test2',id=1,doc_type='_doc')
Out[132]: True
es.exists(index='test2',id=2,doc_type='_doc')
Out[133]: False

更新

指定ID单条更新:

#指定ID进行更新单条记录
data={
    "doc":{
        "age":77
    }
}
es.update(index='test2',id=3,doc_type='_doc',body=data)

根据DSL条件批量更新:

data_all={
    "query": {
        "match_all": {}  
    }, 
    "script": {
      "source": "ctx._source.age = params.age;",
      "lang": "painless",
      "params" : {
          "age": "88"
      }
    }
}
es.update_by_query(index='test2',body=data_all)

#语法参考
#https://www.elastic.co/guide/en/elasticsearch/painless/current/index.html

新增

插入一条记录:

data_ins={
          "name" : "Rick.Wang",
          "company" : "优快云",
          "age" : "10",
          "email" : "wangyikai@csdn.com"
        }

es.index(index='test2',body=data_ins,doc_type='_doc',id=8)

删除

指定ID删除记录:

es.delete(index='test2',doc_type='_doc',id=8)

根据DSL条件批量删除:

bd= {'query': {'bool': {'should': [{'match_phrase_prefix': {'email': 'yikai'}}]}}}

es.delete_by_query(index='test2',body=bd)

 

清空

清空索引不删除索引,等同于关系型数据库里的truncate table:

trunc={
  "query": {"match_all": {}}
}
es.delete_by_query(index='test2',body=trunc)

使用BULK命令批量操作

批量插入

#JSON数据不能有回车换行
batch_data= [
     {"index": {}},
     {"name": "王义凯", "age": 11, "email":"wangyikai1@csdn.com", "company":"优快云1"},
     {"index": {}},
     {"name": "wang,yi-kai", "age": 22, "email":"wangyikai2@csdn.com", "company":"优快云2"},
     {"index": {}},
     {"name": "Rick.Wang", "age": 33, "email":"wangyikai3@csdn.com", "company":"优快云3"},
     {"index": {}},
     {"name": "义凯王", "age": 44, "email":"wangyikai4@csdn.com", "company":"优快云4"},
 ]
es.bulk(index='test2',doc_type='_doc',body=batch_data)

 

批量插入更新删除

 使用bulk命令可批量对不同的索引进行插入更新删除等操作:

#批量对不同的索引进行增删改查操作,每个json一行
batch_action=[
    {"index": {"_index": "test2", "_type": "_doc", "_id": "999"}},
    {"name": "rick99", "age": 99, "email":"wangyikai9@csdn.com", "company":"优快云9" },
	{"index": {"_index": "test2", "_type": "_doc", "_id": "888"}},
    {"name": "rick88", "age": 88, "email":"wangyikai8@csdn.com", "company":"优快云8" },
    {"delete": {"_index": "test2", "_type": "_doc", "_id": "999"}},
    {"create": {"_index" : "test2", "_type" : "_doc", "_id": "000"}},
    {"name": "rick00", "age": 100, "email":"wangyikai0@csdn.com", "company":"优快云0" },
    {"update": {"_index": "test2", "_type": "_doc", "_id": "888"}},
    {"doc": {"age": "888"}}
 ]
es.bulk(index='test2',doc_type='_doc',body=batch_action)

使用bulk批量操作的时候,对于不同的操作类型,一定要在前面加上与之对应的操作头信息({“index”: {}}, {‘delete’: {…}}, …),否则会报TransportError(400, u’illegal_argument_exception’)的错误。  

Request包

前面介绍过ES支持Restful接口,我们可以使用curl命令对其进行操作,同样我们也可以使用python里的request包访问操作ES库。

GET查询

使用get函数查询ES数据:

import requests
es_http = 'http://localhost:9200'
index='test2'
type='_doc'
id='888'
auth=('elastic','r12345635x')  #tuple格式的账号密码,如果没有开启xpack安全认证可忽略此参数

#查询指定的id数据
res=requests.get(es_http+'/'+index+'/'+type+'/'+id,auth=auth) #如果没有安全认证则不需要auth参数
res.text

#查询该索引下所有数据
res=requests.get(es_http+'/'+index+'/_search',auth=auth)
res.text

#使用DSL查询数据
bd={
  "query":{
    "bool":{
      "should": [
        {
          "match_phrase_prefix":{
            "name":"rick.wang"
          }
        }
      ]
    }
  }
}
res=requests.get(es_http+'/'+index+'/_search/?pretty',auth=auth,json=bd)#pretty是为了格式化json样式,看起来更好看,可以忽略
print(res.text)

POST

使用POST方法可以与在Kibana中进行一样的操作,比如插入一条记录,比如根据DSL批量更新: 

#使用POST方法往ES中插入数据
data={"name": "rick999", "age": 999, "email":"wangyikai999@csdn.com", "company":"优快云999" }
res = requests.post(es_http+'/'+index+'/_doc/999',auth=auth,json=data)
res.text

res = requests.get(es_http+'/'+index+'/_doc/999',auth=auth)
res.text


#使用POST方法根据DSL对ES进行操作
bd={
    "query": {
        "match_all": {}  
    }, 
    "script": {
      "source": "ctx._source.age = params.age;",
      "lang": "painless",
      "params" : {
          "age": "99"
      }
    }
}
res = requests.post(es_http+'/'+index+'/_update_by_query',auth=auth,json=bd)
res.text

PUT

使用PUT可以创建索引

res = requests.put(es_http+'/'+'new_index',auth=auth)
res.text

DELETE

使用DELETE方法可以删除索引 删除数据等

#往新创建的索引里插入一条记录
data={"name": "rick999", "age": 999, "email":"wangyikai999@csdn.com", "company":"优快云999" }
requests.post(es_http+'/'+'new_index'+'/_doc/999',auth=auth,json=data) 
#判断ID为999的是否存在
es.exists(index='new_index',id=999,doc_type='_doc')

#使用DELETE方法删除ID为999的记录
requests.delete(es_http+'/'+'new_index'+'/_doc/999',auth=auth)
#判断ID为999的是否存在
es.exists(index='new_index',id=999,doc_type='_doc')

#使用DELETE方法删除new_index的索引
res=requests.delete(es_http+'/'+'new_index',auth=auth) #删除索引
res.text

 

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

 

Python Elasticsearch DSL 查询、过滤、聚合操作实例 Python Elasticsearch DSL 使用简介连接 Es:import elasticsearches = elasticsearch.Elasticsearch([{‘host’: ‘127.0.0.1’, ‘port’: 9200}])先看一下搜索, 是指搜索内容,空格对 查询结果没有影响, 指定个数, 指定起始位置, 可以指定需要显示的数据,如本例中显示在最后的结果中的只有 和 。res_3 = es.search(index=“bank”, q=“Holmes”, size=1, f 阅读详情

相关推荐

Elasticsearch数据库怎么访问:Kibana REST API操作详解

深入解析elasticsearch数据库怎么访问,通过Kibana界面和REST API实现高效数据操作,掌握核心查询与管理技巧,提升搜索能力。

weixin_36123300的博客 454

python操作ES数据库

文章目录1、ES数据库和关系型数据库对比2、连接ES数据库3、插入数据4、查询数据 1、ES数据库和关系型数据库对比 一个ES集群可以包含多个索引(数据库),每个索引又包含了很多类型(表),类型中包含了很多文档(行),每个文档使用 JSON 格式存储数据,包含了很多字段(列) 关系型数据库 数据库 表 行 列 ES 索引 类型 文档 字段 2、连接ES数据库 from elasticsearch import Elasticsearch es = Elasticsearch([{"ho

什么TM的叫惊喜 2万+

Elasticsearch入门实战:从零搭建到中文搜索与集群配置

全文搜索引擎是现代数据处理架构中的核心组件,它通过倒排索引等机制,实现了对海量非结构化数据的毫秒级检索。其技术价值在于解决了传统数据库在模糊查询和复杂分析场景下的性能瓶颈,广泛应用于日志分析、站内搜索和实时监控等场景。Elasticsearch作为基于Lucene的分布式搜索与分析引擎,通过其强大的查询DSL和聚合功能,将这一价值发挥到极致。本文聚焦于Elasticsearch的基本用法,详细介绍了如何利用Docker快速部署单节点与集群环境,并深入解析了索引映射、文档CRUD、布尔查询等核心操作。针对中文

weixin_33800463的博客 312

Python 操作es数据库

python es

mei1092670355的博客 1033

ElasticSearch核心概念、架构与实战指南

分布式搜索引擎是现代大数据处理的核心组件,ElasticSearch作为基于Lucene的分布式搜索和分析引擎,通过倒排索引机制实现高性能全文检索。其分布式架构包含主节点、数据节点和协调节点,支持水平扩展处理海量数据。在技术实现上,ES的数据写入涉及分析器处理、内存缓冲和段合并等关键步骤,查询时则采用并行搜索与结果合并策略。典型应用场景包括电商搜索、日志分析等,通过合理配置分片数量、使用批量API和优化查询DSL,可以显著提升系统性能。本文以ElasticSearch 8.x版本为例,详细解析其核心概念、环

weixin_33713707的博客 412

MISP与Elasticsearch集成:构建自动化威胁情报可视化分析平台

威胁情报共享与分析是网络安全运营的核心环节,其核心原理在于通过标准化平台(如MISP)收集、结构化存储各类入侵指标(IOC)。为了充分挖掘情报数据的价值,需要借助强大的搜索与分析引擎进行深度处理。Elasticsearch凭借其分布式架构和倒排索引技术,能够实现海量安全数据的毫秒级检索与复杂聚合分析,这为从静态数据仓库转向动态态势感知提供了关键技术支撑。结合Kibana的可视化能力,安全团队能够将抽象的威胁数据转化为直观的图表、地图和仪表盘,从而在安全运营中心(SOC)场景中快速识别攻击趋势、进行关联分析。

csdndownload11123的博客 386

python 查询Elasticsearch的小例子

#!/usr/bin/env python# -*- coding: utf-8 -*-from sfo_common.agent import Agentfrom sfo_common.import_common import *class ElkLog(object): """ 处理ELK数据类 """ def __init__(self): pass ...

weixin_30299709的博客 106

阿里云Elasticsearch免费试用:快速搭建日志分析平台与Kibana可视化

Elasticsearch作为分布式搜索与分析引擎,其核心原理基于倒排索引和分片机制,能够实现海量数据的近实时检索与聚合分析。在技术价值上,它极大地提升了日志分析、监控指标和业务数据的查询效率与可视化能力。对于常见的应用场景如日志集中管理、业务指标监控和全文搜索,Elasticsearch结合Kibana提供了开箱即用的解决方案。本文以阿里云Elasticsearch的免费试用为例,详细介绍了如何快速开通托管服务,并重点解析了网络配置中的VPC专有网络与公网访问白名单等关键安全设置,帮助开发者绕过复杂的本地

既是过河之卒,惟有奋力向前。 422

基于ELK栈构建《英雄联盟》韩服对局数据分析平台实战指南

在数据驱动的时代,游戏数据分析已成为电竞产业和玩家技术提升的核心环节。其基本原理是通过采集、处理、存储和可视化海量游戏对局数据,将非结构化的游戏事件转化为可量化、可查询的结构化信息。这项技术的核心价值在于能够为精细化复盘、战术决策和玩家行为研究提供客观的数据支撑,广泛应用于职业战队分析、高端玩家技术提升和电竞内容制作等场景。本文聚焦于如何利用ELK技术栈(Elasticsearch, Logstash, Kibana)结合Python抓取脚本,搭建一个针对《英雄联盟》韩服高端对局的本地化数据分析平台,实现从

weixin_30500473的博客 425

十分钟构建智能文档搜索系统:Elasticsearch与Jina Embeddings实战

向量搜索是一种将文本转换为高维向量表示,并通过计算向量间相似度实现语义匹配的核心技术。其原理基于嵌入模型将语义相近的文本映射到向量空间中邻近的位置,从而突破传统关键词匹配的局限。这项技术的核心价值在于能够理解用户查询的深层意图,即使查询词与文档表述不完全一致,也能精准召回相关内容。在工程实践中,向量搜索广泛应用于智能客服、知识库检索、内容推荐等场景,尤其适合处理PDF、Word等非结构化文档的语义搜索需求。本文以Elasticsearch原生向量搜索功能结合Jina Embeddings v5开源模型为例,

weixin_33985679的博客 442

ElasticStack实战:从零搭建日志分析平台与核心组件部署指南

日志管理与数据分析是现代运维和开发中的基础需求,其核心在于对海量、分散的日志数据进行高效的采集、存储、检索与可视化。ElasticStack(常称ELK Stack)作为一套成熟的开源技术栈,完美回应了这一需求。其技术原理基于分布式搜索引擎Elasticsearch提供近实时的全文搜索与聚合分析能力,配合轻量级数据采集器Beats和强大的数据管道处理工具Logstash,实现了从数据源到洞察的完整链路,并通过Kibana提供直观的可视化界面。这套组合的技术价值在于能够处理PB级数据,极大地提升了故障排查、业

weixin_30512089的博客 646

Linux基础学习(12)ELK企业级日志分析平台

本文系统介绍了ELK企业级日志分析平台的技术架构与部署实践。主要内容包括:1. Elasticsearch核心概念解析:倒排索引原理、集群角色划分、分片机制和存储原理 2. 三节点ES集群的详细部署配置,包含主节点、数据节点和协调节点的设置 3. Logstash数据处理管道的三大模块(输入/过滤/输出)及常用插件应用 4. Filebeat轻量级日志采集方案与Logstash的性能对比 5. Kibana可视化分析界面的部署与仪表盘创建 6. ES集群的备份恢复机制(快照)与安全认证配置 7. 生产级EL

2403_82461762的博客 226

PHP+多语言爬虫+向量数据库OpenClaw构建工业级智能搜索引擎

搜索引擎是现代信息检索的核心技术,其基本原理是通过网络爬虫抓取网页,建立索引,再根据用户查询返回相关结果。传统基于关键词匹配的搜索技术(如倒排索引)在处理复杂语义时存在局限,难以理解查询意图与文档内容之间的深层关联。随着人工智能技术的发展,向量数据库和语义嵌入模型为搜索带来了革命性提升,它们能将文本转换为高维向量进行语义相似度计算,从而实现更精准的“理解式”检索。这种智能搜索技术在知识管理、垂直领域信息聚合和研发效率提升等场景中价值巨大。本文聚焦于一个具体实践:如何利用全栈PHP实现业务调度,结合多语言爬虫

weixin_30706691的博客 364

技术文章系列整理(持续更新)

本博客有很多关于性能及测试开发的文章。我试着对你可能感兴趣的一些重要文章进行分类。

7DGroup,让技术更有价值! 1万+

Python编写Elasticsearch数据查询:实现数据搜索和分析

通过上述例子可以看出,使用Python编写Elasticsearch查询程序非常简单,可以轻松地实现数据搜索和分析。通过深入学习Elasticsearch的各种查询和分析功能,可以更好地利用大数据资源,为企业决策提供支持。Elasticsearch提供了强大的搜索功能,可以进行全文搜索、短语搜索、前缀搜索等。这个例子中,我们使用了term aggregation进行分析,对genre这个字段进行聚合操作,输出每个genre出现的次数。Python编写Elasticsearch数据查询:实现数据搜索和分析。

. 919

从机械到数字:EC11旋转编码器与ESP32的PWM控制艺术

本文详细解析了EC11旋转编码器与ESP32的PWM控制技术,探讨了如何将机械旋转动作转换为精确的数字信号控制。通过硬件连接、信号处理和软件优化等实践技巧,开发者可以构建高效的人机交互系统,适用于智能照明、电机控制等多种应用场景。

android的专栏 786

【运维面试】关于运维面试ELK相关的问题核心梳理(1),阿里官方推荐

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)① 2000多本Python电子书(主流和经典的书籍应该都有了)、爬虫、web开发、大数据分析方面的视频(适合小白学习)③ 项目源码(四五十个有趣且经典的练手项目及源码)⑤ Python学习路线图(告别不入流的学习)⑤ Python学习路线图(告别不入流的学习)② Python标准库资料(最全中文版)

m0_60452141的博客 514

NFC门禁卡复制全解析:从M1卡到UID卡的攻防实践

本文深入解析了NFC门禁卡的安全机制与攻防实践。从M1卡基于Crypto1算法的原理漏洞讲起,详细阐述了利用Proxmark3等工具进行侦听、破解密钥及使用UID卡进行复制的完整攻击链条。同时,为防御方提供了从升级CPU卡、启用全扇区认证到部署多因子验证的系统性防护策略,旨在帮助管理员构建更稳固的物理安全防线。

weixin_29182481的博客 1401

工业级RAG系统向量数据库选型:Elasticsearch与Milvus深度对比

向量检索是构建现代语义搜索和推荐系统的核心技术,其核心原理是通过将文本、图像等高维数据映射为向量,并利用近似最近邻(ANN)算法在向量空间中快速查找相似项。这项技术的价值在于能够突破传统关键词匹配的局限,实现深层次的语义理解,从而广泛应用于智能问答、内容推荐、知识库检索等场景。在工业级检索增强生成(RAG)系统中,面对海量数据、高并发查询和复杂过滤需求,向量数据库的选型成为关键。本文聚焦于Elasticsearch和Milvus这两大主流方案,深入剖析它们在混合检索、结构化过滤、扩展性等维度的优劣,并结合*

weixin_30628801的博客 362

AnyLogic 建立谢林模型

AnyLogic 建立谢林模型说明创建一个新模型创建代理人群体和离散空间双击 people 前的图标,编辑 Person设置 Agent 的形状(Person)在模型中启用离散时间,实现代理行为点击 Person,进行编辑点击运行按钮效果图 说明 我们将把 Schelling 的模型实现为一个基于离散空间/离散时间的代理模型。空间代表一个城市,每个单元格代表一个房子。 agent 是人,是两种颜色:黄色和红色。 最初,人是随机分布在城市中的。人比房子少,所以总是有一个人可能会移动。 这个模型中的 agent

qq_45642410的博客 2577

华为OD机试 - 取出尽量少的球 - 感谢@吴修柯反馈(Python/JS/C/C++ 双机位A卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。感谢@吴修柯反馈,2025-03-22,A卷200分考试真题。某部门开展 Family Day 开放日活动,其中有个从桶里取球的游戏。有 N 个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球,每个小桶装的小球数量记录在数组 bucke

学Java,找哪吒 1486

基于Binlog与MQ实现MySQL到Elasticsearch秒级数据同步架构详解

在分布式系统架构中,数据同步是确保多数据源一致性的核心挑战。其基本原理是通过捕获源数据库的变更事件,经过可靠管道传递,最终在目标存储中实现状态同步。这项技术的核心价值在于解耦业务逻辑与数据分发,保障系统在高并发下的最终一致性。典型的应用场景包括电商商品搜索、实时数据分析看板和日志聚合分析等。本文聚焦于如何构建一个稳定、可观测的实时同步管道,通过整合MySQL Binlog变更数据捕获(CDC)、消息队列(MQ)解耦与削峰,以及消费者幂等写入等关键技术,解决生产环境中常见的数据延迟与一致性问题,实现秒级数据同

weixin_30402343的博客 333

红米K70至尊版修复“nv损坏”主板电阻图示 mtk芯片工程固件刷写与步骤说明

💝💝💝红米K70至尊版 机型代码:rothko,搭载天玑9300+旗舰芯片.后置5000万像素索尼IMX906高动态OIS主摄,800万像素超广角镜头,200万像素微距镜头,前置2000万像素摄像头,也适用于以下型号的小米机型:2407FPN8EG,2407FPN8ER,XIG06,A402XM,2407FRK8EC。 💝💝💝通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝💝-----此机型刷写工程固件预览界面 3💝💝💝------红米K

小马哥的专栏 1461
上一篇: 在Hive中操作Phoenix,对比Hive查询Hbase
下一篇: 在Python中使用ibis,impyla,pyhive,pyspark连接Kerberos安全认证的Hive、Impala
王义凯_Rick
王义凯_Rick 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄14年 858粉丝 162原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值