elasticsearch增删改查索引结构示例 - 详解

news/2026/1/9 4:15:51/文章来源:https://www.cnblogs.com/ljbguanli/p/19448085

elasticsearch增删改查索引结构示例 - 详解

elasticsearch是经常用到的文档索引工具,使用方便快捷。

之前介绍了如何创建和查询索引结构

https://blog.csdn.net/liliang199/article/details/154641939

这里进一步示例在创建索引后,如何增加、删除、以及修改数据。

所用示例代码参考和修改自网络资料。

1 es索引管理

这里简单示例如何创建、和修改索引。

1.1 创建连接

首先连接es,示例如下

from elasticsearch.helpers import bulk
import elasticsearch
class ElasticSearchClient(object):@staticmethoddef get_es_servers():es_host = "http://localhost:9200"es_client = elasticsearch.Elasticsearch(hosts=es_host)return es_client
es_client = ElasticSearchClient().get_es_servers()
print(es_client.info())

输出如下

{'name': 'a2e27d00bb95', 'cluster_name': 'docker-cluster', 'cluster_uuid': 'fXhGBstXTKmI3dd0JBq_mw', 'version': {'number': '8.11.3', 'build_flavor': 'default', 'build_type': 'docker', 'build_hash': '64cf052f3b56b1fd4449f5454cb88aca7e739d9a', 'build_date': '2023-12-08T11:33:53.634979452Z', 'build_snapshot': False, 'lucene_version': '9.8.0', 'minimum_wire_compatibility_version': '7.17.0', 'minimum_index_compatibility_version': '7.0.0'}, 'tagline': 'You Know, for Search'}

1.2 索引创建

创建名称为es_index_test的索引,包含document_id, title字段。

index = "es_index_test"
mapping = {"properties": {"document_id": {"type": "text"},"title": {"type": "text"},}
}
print(es_client.indices.exists(index=index))
res = es_client.indices.create(index=index,mappings=mapping
)
print(res)

输出如下

False
{'acknowledged': True, 'shards_acknowledged': True, 'index': 'es_index_test'}

1.3 索引修改

这里在不重建索引前提下,新增content字段,示例如下。

# 添加新字段 "new_field" 为 keyword 类型
es_client.indices.put_mapping(index=index,body={"properties": {"content": {"type": "text"}}}
)
# 查看修改后的索引
res2 = es_client.indices.get(index=index)
print(res2)

输出示例如下

{'es_index_test': {'aliases': {}, 'mappings': {'properties': {'content': {'type': 'text'}, 'document_id': {'type': 'text'}, 'title': {'type': 'text'}}}, 'settings': {'index': {'routing': {'allocation': {'include': {'_tier_preference': 'data_content'}}}, 'number_of_shards': '1', 'provided_name': 'es_index_test', 'creation_date': '1764842498013', 'number_of_replicas': '1', 'uuid': 'OP22_lHLQvCidVxzPyApyA', 'version': {'created': '8500003'}}}}}

1.4 删除索引

这里示例如何删除索引

if es_client.indices.exists(index=index):print('test_index索引存在,即将删除')es_client.indices.delete(index=index)
else:print('test_index索引不存在!')

2 es数据操作

这里示例如何导入、修改和删除索引的具体数据项。

2.1 单条导入

单条数据导入示例如下

obj1 = {"document_id": "news_1","title": u"The Ten Best Science Books of 2025","content": u"In 2025, our science reporters followed the first confirmed glimpse of a colossal squid and a rare look at dinosaur blood vessels. We watched the odds of a future asteroid impact climb to higher-than-normal levels—then drop back down to zero. We parsed headlines on a blood test to detect cancer and a beloved pair of coyotes in New York City’s Central Park. Throughout it all, many of us read extended works of science nonfiction, pulling back the curtain on tuberculosis, evolution and the Arctic....",}
obj2 = {"document_id": "news_2","title": u"The 7 Most Groundbreaking NASA Discoveries of 2025","content": u"In 2025, NASA faced unprecedented uncertainty as it grappled with sweeping layoffs, looming budget cuts, and leadership switch-ups. Despite all of that, the agency somehow still managed to do some seriously astonishing science.....",}
_id1 = 1
es_client.index(index=index, body=obj1, id=_id1)
_id2 = 2
es_client.index(index=index, body=obj2, id=_id2)

输出如下

ObjectApiResponse({'_index': 'es_index_test', '_id': '2', '_version': 4, 'result': 'updated', '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 8, '_primary_term': 1})

2.2 批量导入

批量插入数据示例如下

from elasticsearch.helpers import bulk
def add_date_bulk(es_client, index, row_obj_list):"""批量插入ES"""load_data = []i = 1bulk_num = 2000  # 2000条为一批for row_obj in row_obj_list:action = {"_index": index,"_id": row_obj.get('_id', 'None'),"_source": {'document_id': row_obj.get('document_id', None),'title': row_obj.get('title', None),'content': row_obj.get('content', None),}}load_data.append(action)i += 1# 批量处理if len(load_data) == bulk_num:print('插入', i / bulk_num, '批数据')print(len(load_data))success, failed = bulk(es_client, load_data, index=index, raise_on_error=True)del load_data[0:len(load_data)]print(success, failed)if len(load_data) > 0:success, failed = bulk(es_client, load_data, index=index, raise_on_error=True)del load_data[0:len(load_data)]print(success, failed)
write_obj = {"_id": 1,"document_id": 1,"title": u"Elasticsearch 完全指南:原理、优势与应用场景","content": u"Elasticsearch 是一个基于 Apache Lucene 构建的开源、分布式、RESTful 搜索和分析引擎。它是 Elastic Stack(ELK Stack)的核心组件,由 Elastic 公司开发和维护。",}
row_obj_list = [write_obj]
for i in range(2, 2200):temp_obj = write_obj.copy()temp_obj["_id"] = itemp_obj["document_id"] = str(i)row_obj_list.append(temp_obj)
add_date_bulk(es_client, index, row_obj_list)

输出如下

插入 1.0005 批数据
2000
2000 []
199 []

2.3 数据修改

单条数据修改更细示例如下,需要先获取到id,然后依据id更新对应的文档。

def update_by_id(es_client, index, row_obj):"""根据给定的_id,更新ES文档:return:"""_id = row_obj.get("_id", 1)row_obj.pop("_id")es_client.update(index=index, body={"doc": row_obj}, id=_id)
row_obj = {"_id": 1,"document_id": 6,"title": u"20个必知的PyTorch概念简单解释,带你快速入门","content": u"PyTorch是当今最重要且最受欢迎的深度学习框架之一。它基于Meta的Lua语言Torch库构建,并于2017年开源。自发布以来,该库已被用于构建几乎所有重要的现代AI创新,从特斯拉的自动驾驶汽车到OpenAI的ChatGPT。本文将从基础出发,系统阐述20个最重要的概念,以深化对PyTorch的理解。",}
update_by_id(es_client, index, row_obj)

2.4 数据删除

依据id删除文档示例如下。

先获取到id,然后依据id删除对应的文档。

def delete_by_id(es_client, index, _id):"""根据给定的id,删除文档:return:"""es_client.delete(index=index, id=_id)
_id = 8
delete_by_id(es_client, index, _id)

reference

---

elasticsearch创建和查询索引结构示例

https://blog.csdn.net/liliang199/article/details/154641939

ElasticSearch 数据增删改实现 

https://www.cnblogs.com/sandea/p/9467315.html

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

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

相关文章

本地部署智能家居系统 OpenHAB 并实现外部访问( Windows 版本)

OpenHAB( Open Home Automation Bus )是一款开源的智能家居系统,它允许用户连接并控制各种智能设备,无论这些设备是来自不同制造商还是基于不同的技术标准,适合那些希望将家中的智能设备统一管理,并希望通过…

AI Agent 时代全攻略:大模型+智能体,编程开发者的最强外挂,收藏这一篇就够了!

Agent时代的到来——AI从工具到伙伴的跨越 当Meta以数十亿美元收购AI Agent初创公司Manus,当Gartner预测2026年40%的企业应用将集成任务专用Agent,当全球市场规模在两年内实现翻倍增长,一场由智能体(AI Agent)引领的技…

【深度学习】YOLO实战之模型训练

YOLO 模型训练是核心执行环节,这一步是把前期的数据集、配置文件落地成可用模型的关键,我会从数据增强(怎么让模型学得更好)、训练流程(一步步落地)、监控指标(怎么判断训练效果) 三…

Twitter Shorts 的封面图设计吸引点击技巧是什么?

Twitter Shorts 封面图设计:我压箱底的吸引点击技巧 说真的,每次我刷 Twitter(现在叫 X),看到那些 Shorts 或者 Reels,第一眼决定我点不点进去的,真的就是那个封面图。有时候视频内容可能平平无奇,但封面太抓人…

2026年1000元支付宝立减金回收多少,各面值价格表 - 淘淘收小程序

在日常使用支付宝的过程中,我们可能会获得各种各样的立减金。有时候,这些立减金的使用场景不符合我们的需求,或者我们暂时用不上,那该如何处理呢?这就涉及到支付宝立减金回收。了解立减金回收价格,能让我们在处理…

机器人关节多维力试验机/传动系统总成效率试验机/制动系统总成效率试验机/传动机构运动工况模拟试验机哪个品牌更强?有没有资深采购能给点推荐? - 品牌推荐大师

在高端装备制造领域,传动机构运动工况模拟试验机的选型直接关乎产品研发效率与质量管控精度。面对市场上众多品牌,“哪个品牌更强”成为采购者的核心困惑。结合多年行业采购经验,选择这类设备需跳出单纯的参数对比,…

基于博弈与需求响应模型的光伏用户群电能共享方法探索

matlab代码:基于博弈与需求响应模型的光伏用户群的电能共享方法 摘要:为了使光伏用户群内各经济主体能实现有序的电能交易,提出了一种基于光伏电能供需比(SDR)的内部价格模型。 在考…

CentOS 7 新磁盘LVM挂载详细步骤

CentOS 7 新磁盘LVM挂载详细步骤 1. 准备工作:查看磁盘信息 # 查看当前磁盘情况 lsblk fdisk -l# 查看磁盘是否被识别 lsscsi ls -l /dev/sd*2. 分区(可选,LVM可以直接使用整盘) 方案A:创建分区 # 对sdb进行分区(…

2026执医技能通关攻略:高效工具+核心操作+避坑指南,助你一次过! - 品牌测评鉴赏家

2026执医技能通关攻略:高效工具+核心操作+避坑指南,助你一次过!一、备考痛点直击:26执医技能备考,这些难题你是否也遇到? 执业医师资格考试的技能操作部分,是众多医学生和医务工作者迈向职业晋升道路上的关键关…

SWMM深度二次开发专题8:网络分析-最短路径查询

使用networkClass实例可以通过findShortestPath函数获得两点之间的最短路径信息. 1 案例项目内容 本专题对应的开发案例为\software\tutorial\exp_network_getNetwork文件夹中的内容,其中SWMMCPP_network_getNetwork子文件夹为VS2022 C项目内容, swmm_network子文件夹为管网模…

2025年碳化硅品牌口碑榜:这些品牌为何备受青睐?磨料/不锈钢灰/棕刚玉/铬刚玉/碳化硅/黑碳化硅,碳化硅定制口碑推荐 - 品牌推荐师

近年来,随着新能源汽车、光伏、半导体等行业的快速发展,碳化硅作为第三代半导体材料的核心原料,其市场需求持续攀升。据行业数据显示,2024年全球碳化硅市场规模已突破30亿美元,预计2025年将保持年均15%以上的增速…

西门子840D HMI ADVANCED PC版:数控与PLC数据备份恢复、伺服调试、参数设定...

西门子840D HMI ADVANCED FOR PC。 也可用于810D,840DSL。 1、软件可安装到台式机或笔记本上,可以连接到机床的NCU进行NC与PLC的数据备份与恢复,备份和恢复的数据存储在电脑中。 也可以把NC程序放到电脑中,通过此软件加载到NCU中,…

跨境家具的海外仓安装教程广告互动形式是什么?

跨境家具的海外仓安装教程广告,到底怎么搞才能让老外忍不住点赞转发? 嘿,朋友。咱们今天来聊聊一个特别具体,但又让很多做跨境家具的朋友头疼的事儿:怎么在Twitter上,用海外仓安装教程这种硬核内容,做出让人愿意…

2025年市面上的艺术漆厂商有哪些,诺兰迪艺术漆/诺兰迪艺术涂料/墙面艺术漆/环保艺术涂料,艺术漆公司哪个好 - 品牌推荐师

随着消费者对家居环境的美学追求与健康环保意识同步提升,艺术涂料市场正经历着一场深刻的变革。从简单的墙面装饰,到承载空间个性与情感表达的艺术载体,艺术漆以其丰富的质感、多变的色彩和独特的肌理,成为现代室内…

医疗宣称需替换为场景化描述才能合规?

Instagram 营销:当“医疗宣称”遇上“场景化描述”,我们到底在怕什么? 嘿,最近刷 Instagram,是不是发现很多品牌说话的方式变了?以前那种“三天见效”、“根治XX”的标题党好像收敛了不少。取而代之的,是一些看…

转速恒压频比交流变频调速系统Simulink仿真

转速恒压频比交流变频调速系统Simulink仿真,可观察到电压频率的变比情况以及电动机的转速波形。 配有精美的报告说明。在电力系统中,变频调速技术是一种非常重要的控制手段,广泛应用于电机调速、电力补偿等领域。转速恒压频比调速系统是一种基…

点阵数码管显示屏驱动LED显示驱动芯片VK1S68C 数显驱动器原厂【FAE技术支持】

VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3 线串行接口、数据锁存器、LED 驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED 阴极,可支持13SEGx4GRID、12SEGx5GRID、11SEGx6GRID…

安防监控视频汇聚平台EasyCVR打造出入口匝道安全畅行智慧管理方案

出入口匝道作为高速公路、城市快速路的关键交通节点,是车流交汇、方向转换的核心区域,却也长期面临拥堵频发、事故率高、管控滞后等痛点。传统视频监控方案因存在协议兼容不足、网络传输不稳定、智能分析缺失等问题,…

paperzz 开题报告:AI 工具如何把 “开题焦虑” 变成 “一键搞定”?

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 开题报告https://www.paperzz.cc/proposal 当你对着开题报告的空白文档,既怕研究思路不清晰被导师驳回,又愁 PPT 框架太松散撑不起答辩时,paperzz 的 AI 开题…

Spring Boot 属性配置文件

Spring Boot 属性配置文件 Spring Boot 的属性配置文件是项目配置的核心,支持灵活的文件格式、加载规则和数据类型,本文将从文件类型、加载顺序、配置属性类型、实际使用示例等方面全面介绍。 配置文件类型 Spring B…