当前位置: 首页 > news >正文

python操作Elasticsearch执行增删改查

文章目录

  • 基本操作
  • 更多查询方法
    • 1. 查询全部数据
    • 2. 针对某个确定的值/字符串的查询:term、match
    • 3. 在多个选项中有一个匹配,就查出来:terms
    • 4. 数值范围查询:range
    • 5. 多个条件同时触发 bool
    • 6. 指定返回值个数 size
    • 7. 返回指定列 _source
  • 完整示例程序

基本操作

  1. 首先连接Elasticsearch数据库,然后创建一个自定义的索引
from elasticsearch import Elasticsearch
import random
from elasticsearch import helpers# 连接到本地的 Elasticsearch 服务
es = Elasticsearch(hosts=["http://localhost:9200"])
index_name = "my_index"# 创建一个索引名为 "my_index" 的索引
if es.indices.exists(index=index_name):  # 如果索引存在,删除es.indices.delete(index=index_name)
es.indices.create(index=index_name)  # 新建索引
  1. 新增随机数据

这里我们创建随机数据项,包含value_num与value_choice项,

# 新增随机数据项
add_value_list: list = []
for _ in range(1000):num = random.randint(1, 100)add_value_list.append({"_index": index_name,  # 注意!个参数决定要插入到哪个索引中"value_num": random.randint(1, 100),"value_choice": ["c1", 'c2', 'c3'][random.randint(0, 2)],})
# 批量插入数据
helpers.bulk(es, add_value_list)
  1. 查询操作
# 查询操作
_body_query = {"query": {"range": {"value_num": {"gte": 40,  # >= 40"lte": 60  # <= 60}}},"size": 20,  # 查询20条
}
response = es.search(index=index_name, body=_body_query)
# 打印查询的结果
for _hit in response["hits"]["hits"]:_value = _hit['_source']print("value_num:", _value["value_num"], " value_choice:", _value['value_choice'])
  1. 更新数据项

这里,我们将查询出的数据中,通过文档ID与修改的数据重新为数据赋值

# 更新操作
for _hit in response["hits"]["hits"]:update_body = {"doc": {"value_choice": "c4",  # 更新value_choice字段为c4}}res = es.update(index=index_name, id=_hit['_id'], body=update_body)
  1. 删除数据项
# 删除操作
for _hit in response["hits"]["hits"]:res = es.delete(index=index_name, id=_hit['_id'])

更多查询方法

1. 查询全部数据

_body_query = {"query":{"match_all":{}}
}

2. 针对某个确定的值/字符串的查询:term、match

match会执行多个term操作,term操作精度更高

_body_query = {"query": {"match": {"value_choice": "c1"}}
}
_body_query = {"query": {"term": {"value_choice": "c1"}}
}

3. 在多个选项中有一个匹配,就查出来:terms

_body_query = {"query": {"terms": {"value_choice": ["c1", "c2"],}}
}

4. 数值范围查询:range

查询>=40且<=60的数据

_body_query = {"query": {"range": {"value_num": {"gte": 40,  # >= 40"lte": 60  # <= 60}}}
}

5. 多个条件同时触发 bool

布尔查询可以同时查询多个条件,也称为组合查询,构造查询的字典数据时,query后紧跟bool,之后再跟bool的判断条件,判断条件有下面几个:

  • filter:过滤器
  • must:类似and,需要所有条件都满足
  • should:类似or,只要能满足一个即可
  • must_not:需要都不满足

写完判断条件后,在判断条件的list里再紧跟查询操作的具体细节

_body_query = {"query": {"bool": {"should": [{"match": {"value_choice": "c1"} # value_choice = "c1"},{"range": {"value_num": {"lte": 50}} # value_num <= 50}]}},
}

6. 指定返回值个数 size

在构造的字典中添加size关键字即可

_body_query = {"query": {"range": {"value_num": {"gte": 40,  # >= 40"lte": 60  # <= 60}}},"size": 20,
}

7. 返回指定列 _source

_body_query = {"query": {"range": {"value_num": {"gte": 40,  # >= 40"lte": 60  # <= 60}}},"_source": ["value_num"] # 这里指定返回的fields
}

完整示例程序

from elasticsearch import Elasticsearch
import random
from elasticsearch import helpers# 连接到本地的 Elasticsearch 服务
es = Elasticsearch(hosts=["http://localhost:9200"])
index_name = "my_index"# 创建一个索引名为 "my_index" 的索引
if es.indices.exists(index=index_name):  # 如果索引存在,删除es.indices.delete(index=index_name)
es.indices.create(index=index_name)  # 新建索引# 生成随机数据
add_value_list: list = []
for _ in range(1000):num = random.randint(1, 100)add_value_list.append({"_index": index_name,  # 注意!个参数决定要插入到哪个索引中"value_num": random.randint(1, 100),"value_choice": ["c1", 'c2', 'c3'][random.randint(0, 2)],})
# 批量插入数据
helpers.bulk(es, add_value_list)# ================== 开始增删改查 ==================
_body_query = {"query": {"range": {"value_num": {"gte": 40,  # >= 40"lte": 60  # <= 60}}},"size": 20,
}response = es.search(index=index_name, body=_body_query)  # 查询10条
# 打印查询的结果
for _hit in response["hits"]["hits"]:_value = _hit['_source']print("value_num:", _value["value_num"], " value_choice:", _value['value_choice'])# 更新操作
for _hit in response["hits"]["hits"]:update_body = {"doc": {"value_choice": "c4",  # 更新value_choice字段为c4}}res = es.update(index=index_name, id=_hit['_id'], body=update_body)# 删除操作
for _hit in response["hits"]["hits"]:res = es.delete(index=index_name, id=_hit['_id'])

相关文章:

python操作Elasticsearch执行增删改查

文章目录 基本操作更多查询方法1. 查询全部数据2. 针对某个确定的值/字符串的查询&#xff1a;term、match3. 在多个选项中有一个匹配&#xff0c;就查出来&#xff1a;terms4. 数值范围查询&#xff1a;range5. 多个条件同时触发 bool6. 指定返回值个数 size7. 返回指定列 _so…...

学习C++:关键字

关键字&#xff1a; 作用&#xff1a;关键字是C预先保留的单词&#xff08;标识符&#xff09; 在定义变量或者常量时候&#xff0c;不要用关键字 不要用关键字给变量或者常量起名称...

FFmpeg在python里推流被处理过的视频流

链式算法处理视频流 视频源是本地摄像头 # codinggbk # 本地摄像头直接推流到 RTMP 服务器 import cv2 import mediapipe as mp import subprocess as sp# 初始化 Mediapipe mp_drawing mp.solutions.drawing_utils mp_drawing_styles mp.solutions.drawing_styles mp_holis…...

为什么推荐使用构造函数注入而非@Autowired注解进行字段注入

在 Spring 框架中&#xff0c;推荐使用构造函数注入而非Autowired注解进行字段注入&#xff0c;主要有以下几个原因&#xff1a; 1. 依赖不可变和空指针安全 构造函数注入&#xff1a;使用构造函数注入时&#xff0c;依赖在对象创建时就必须提供&#xff0c;一旦对象创建完成&…...

如何卸载和升级 Angular-CLI ?

Angular-CLI 是开发人员使用 Angular 的必备工具。然而&#xff0c;随着频繁的更新和新版本的出现&#xff0c;了解如何有效地卸载和升级 Angular-CLI 对开发人员来说至关重要。本指南提供了一个全面的、循序渐进的方法来帮助您顺利过渡到最新版本。 必备条件 确保您的系统上…...

在线excel编辑(luckysheet)

项目地址&#xff1a;Luckysheet: &#x1f680;Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 可以下载项目使用npm安装运行&#xff0c;也可以用cdn 加载excel文件&#xff08;使用luckyexcel&#xff09;&#xff1a; …...

【ES6复习笔记】Symbol 类型及其应用(9)

一、Symbol 简介 Symbol 是 JavaScript 中的一种基本数据类型&#xff0c;它表示唯一的标识符。Symbol 的主要目的是防止属性名冲突&#xff0c;尤其是在多个代码库或模块中共享对象时。Symbol 值可以用作对象的属性名&#xff0c;这样可以确保属性名是唯一的&#xff0c;不会…...

[原创](Modern C++)现代C++的第三方库的导入方式: 例如Visual Studio 2022导入GSL 4.1.0

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共23年] 职业生涯: 21年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse…...

【ES6复习笔记】Class类(15)

介绍 ES6 提供了更接近传统语言的写法&#xff0c;引入了 Class&#xff08;类&#xff09;这个概念&#xff0c;作为对象的模板。通过 class 关键字&#xff0c;可以定义类。基本上&#xff0c;ES6 的 class 可以看作只是一个语法糖&#xff0c;它的绝大部分功能&#xff0c;…...

【Golang 面试题】每日 3 题(六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

openEuler安装OpenGauss5.0

OpenGauss5.0 Linux服务器 极简版 服务器安装 单节点安装 极简版安装 安装准备 获取安装包 下载地址&#xff1a;https://opengauss.org/zh/download/archive/版本选择&#xff1a;5.0.0 (LTS)系统架构&#xff1a;uname -m操作系统&#xff1a;cat /etc/os-release完整性校…...

20241230 机器学习ML -(1)线性回归(scikitlearn)

机器学习ML入门。 线性回归 ScikitLearnLRRidgeLassoElasticNetL2:解决共线性问题 (Colinearity Problem) L1:特征选择(AI的解释) W=XtX XtY (Xw=Y >> XtXw= XtY) 当 COND(Xtx) ~ infinit, 导致inv(XtX)无解 举例: 12 23 46 XtX=[14,28] [28,56] eigVal=det…...

MacOS下TestHubo安装配置指南

TestHubo是一款开源免费的测试管理工具&#xff0c; 下面介绍MacOS私有部署的安装与配置。TestHubo 私有部署版本更适合有严格数据安全要求的企业&#xff0c;支持在本地或专属服务器上运行&#xff0c;以实现对数据和系统的完全控制。 1、Mac 服务端安装 Mac安装包下载地址&a…...

mysql性能问题排查

生产环境 Mysql执行性能分析 问题排查思路通过 performance_schema 分析performance_schema 说明查询 performance_schema 所有表信息performance_schema 相关表 主要相关介绍events_statements_history 分析慢查询 和查询当时状态字段说明 问题排查思路 查询慢SQL日志查询SQL…...

centos单机部署seata

文章目录 场景分析下载seata包启动 场景 centos7.9 jdk17 安装部署seata 分析 jdk和seata的版本对应关系如图 JDK版本 推荐 Seata 版本 理由 JDK 8 任何 Seata 版本 JDK 8 是 Seata 长期支持的版本&#xff0c;兼容性最好。 JDK 11 Seata 1.2.0 适合需要长期支持且性能较高的应…...

YOLOv9-0.1部分代码阅读笔记-lion.py

lion.py utils\lion.py 目录 lion.py 1.所需的库和模块 2.class Lion(Optimizer): 1.所需的库和模块 # Lion优化器是一种新型的神经网络优化算法&#xff0c;由Google Brain团队通过遗传算法发现&#xff0c;全称为EvoLved SIgn MOmeNtum&#xff0c;意为“进化的符号动…...

运行Zr.Admin项目(前端)

1.确认环境信息 我这里装的是node16.17版本的 官网16版本的最新为v16.20.2&#xff0c;下载链接https://nodejs.org/dist/v16.20.2/node-v16.20.2-x64.msi 2.去掉ssl 进入到Zr.Admin项目根目录&#xff0c;进入到ZR.vue 打开package.json 文件&#xff0c;删除启动命令配置中…...

HarmonyOS NEXT 实战之元服务:静态多案例效果(一)

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1代码案例如下&#xff1a; import { authentication } from…...

go下载依赖提示连接失败

1、现象 Go下载模块提示连接失败 dial tcp 142.251.42.241:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.…...

JS 异步 ( 二、Promise 的用法、手写模拟 Promise )

文章目录 一、Promise 基础Promise 作用Promise 语法Promise 内部状态值 和 链式调用Promise 是否为异步执行Promise 常用函数或属性 二、模拟 Promise&#xff0c;加深理解 一、Promise 基础 Promise 作用 1. 回调地狱 想知道 Promise 的作用&#xff0c; 需要先了解一个概念叫…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...