【基础篇】第3章 索引与文档操作

在Elasticsearch的世界里,索引是存储数据的地方,文档则是索引中的基本单位,包含具体的数据信息。本章将深入探讨索引和文档操作的基础,从创建到管理,为高效数据处理奠定基础。

3.1 索引概念与创建

3.1.1 索引、类型与文档简介

  • 索引:类似于传统数据库中的数据库,用于存储具有相似特征的数据集合。每个索引都有唯一的名称,并且可以被分配到多个分片上。
  • 类型:在Elasticsearch 7.x之后,类型已经被弃用,建议将所有文档存储在单一类型 _doc 下,以简化数据模型。
  • 文档:是索引中的基本单位,相当于数据库中的行记录。文档是以JSON格式存储的数据对象,每个文档都有一个唯一的标识符(_id)。

3.1.2 创建、删除与修改索引

  • 创建索引
    通过发送一个PUT请求到http://localhost:9200/{index_name},可以创建一个新的索引。例如,创建名为my_index的索引:

    curl -X PUT "localhost:9200/my_index?pretty"
    
  • 删除索引
    使用DELETE请求到相应索引的URL即可删除索引,如:

    curl -X DELETE "localhost:9200/my_index?pretty"
    
  • 修改索引
    修改索引通常涉及更新索引的设置或映射。使用PUT请求加上特定的API,如更新索引设置:

    curl -X PUT "localhost:9200/my_index/_settings?pretty" -H 'Content-Type: application/json' -d'
    {
      "index": {
        "number_of_replicas": 2
      }
    }'
    

3.2 文档 CRUD

3.2.1 创建文档

通过POST或PUT方法添加文档至索引中。例如,向my_index索引添加一个文档:

curl -X POST "localhost:9200/my_index/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
  "title": "Elasticsearch入门",
  "author": "张三",
  "content": "这是关于Elasticsearch的第一篇文章。"
}'

3.2.2 读取文档

GET请求可以用来获取指定ID的文档:

curl -X GET "localhost:9200/my_index/_doc/1?pretty"

3.2.3 更新文档

文档更新实际上是对原文档的替换操作。可以通过POST或PUT请求实现,使用版本控制确保并发安全:

curl -X POST "localhost:9200/my_index/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
  "doc": {
    "content": "这是更新后的内容,加入了新的信息。"
  }
}'

3.2.4 删除文档

DELETE请求可以删除指定ID的文档:

curl -X DELETE "localhost:9200/my_index/_doc/1?pretty"

3.2.5 批量操作

批量操作是Elasticsearch中一项重要的性能优化手段,它允许你在一个请求中执行多个索引、更新、删除操作,显著提高了处理大量数据时的效率。本节将深入探讨批量操作的细节,包括批量操作的格式、优势、最佳实践以及如何有效利用批量API进行高效的数据处理:

curl -X POST "localhost:9200/_bulk?pretty" -H 'Content-Type: application/x-ndjson' -d'
{ "index" : { "_index" : "my_index", "_id" : "2" } }
{ "title" : "深入Elasticsearch", "author" : "李四", "content" : "探索Elasticsearch的高级特性。" }
{ "delete" : { "_index" : "my_index", "_id" : "1" } }
'
批量操作格式

批量操作使用_bulk API,接受一种特殊的NDJSON(Newline Delimited JSON)格式输入,其中每个操作由两行组成:一行是操作元数据,另一行是实际的数据文档。操作元数据包括操作类型(如indexcreateupdatedelete)和可选的元数据,如_id和_version。

示例:

{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "index" : { "_index" : "test", "_id" : "2" } }
{ "field1" : "value2" }
{ "delete" : { "_index" : "test", "_id" : "3" } }
批量操作的优势
  1. 减少网络开销:相较于单个操作,批量处理减少了客户端与服务器之间的往返次数,显著提升了处理速度。
  2. 提升吞吐量:Elasticsearch能够并行处理批量中的多个请求,特别是在处理大量小文档时,效率提升尤为明显。
  3. 原子性:尽管批量操作是一系列操作的组合,但Elasticsearch保证了批量内的所有操作要么全部成功,要么全部失败,提供了事务性的保障。
  4. 灵活的数据导入:适用于数据迁移、日志收集、定时任务等场景,能够高效地导入大量数据。
最佳实践
  1. 平衡批量大小:批量大小不是越大越好。过大的批量会消耗更多的内存和CPU资源,增加处理时间,甚至导致节点响应缓慢或失败。推荐根据实际应用和硬件性能进行测试,找到最优的批量大小。
  2. 监控与调整:使用Elasticsearch的监控工具(如_cat APIs、Kibana的监控面板)跟踪批量操作的性能,如响应时间和错误率,根据反馈调整策略。
  3. 错误处理:批量操作响应中包含了每个操作的执行状态,包括成功或失败的具体原因。应用层应解析这些信息,对失败操作进行重试或记录。
  4. 索引刷新策略:批量导入大量数据时,可以通过设置refresh_interval-1暂停索引的自动刷新,待导入完毕后再手动刷新,以进一步提升导入速度。
批量操作的高级用法
  • 脚本更新:在批量更新操作中,可以直接嵌入Painless脚本,实现复杂的业务逻辑处理,无需单独查询再更新。
  • 版本控制:批量操作支持乐观锁并发控制,通过指定文档的_version字段,可以防止并发更新导致的数据不一致。
  • 回执处理:使用refresh参数可以在批量操作后立即刷新索引,使得新数据立即可见;使用wait_for_active_shards确保操作在指定数量的分片活跃时才执行,增强数据安全性。

3.3 映射管理

映射管理是Elasticsearch数据建模的关键环节,它直接影响到数据的存储效率、查询性能及结果准确性。本节将深入解析映射的概念、动态与静态映射的配置方法,以及如何有效地管理与更新映射,以适应数据模型的变化。

3.3.1 映射概述

映射(Mapping)是Elasticsearch中定义索引如何存储文档的一种方式,它描述了文档中每个字段的数据类型、分析器设置、是否存储原始值等属性。映射不仅决定了如何解析和索引字段,也影响着查询性能和结果排序。

3.3.2 动态映射

自动识别与创建

Elasticsearch默认启用动态映射,这意味着当你首次索引一个文档时,如果文档中的字段没有在映射中预先定义,Elasticsearch会自动检测字段类型并创建相应的映射。这一特性极大地简化了初始数据导入的过程,但也可能导致映射过于灵活,缺乏统一性。

动态映射控制

尽管动态映射方便,但有时需要限制其行为以保持数据的一致性和优化存储。通过设置dynamic参数为truefalsestrict,可以分别允许自动映射、禁止任何自动映射,或仅允许已知字段的映射自动更新。

3.3.3 静态映射

手动定义

静态映射是指在创建索引之前或之后明确地定义好所有字段的映射规则。这包括指定字段的数据类型(如textinteger)、是否分析(analyzed或not_analyzed)、是否存储原始值(store)等。

curl -X PUT "localhost:9200/my_index/_mapping?pretty" -H 'Content-Type: application/json' -d'
{
  "properties": {
    "title": { "type": "text" },
    "author": { "type": "keyword" }
  }
}'

优势与局限

静态映射的优势在于提供了对数据模型的严格控制,有助于保持数据一致性,减少存储空间的浪费,并优化查询性能。然而,它要求在索引初期就对数据结构有较深的理解,且在数据模式发生变化时,需要手动调整映射,增加了维护成本。

3.3.4 映射更新策略

渐进式映射

Elasticsearch支持渐进式的映射更新,允许在索引生命周期中添加新字段或改变字段的某些属性,如分析器设置。但是,核心字段类型(如从text改为integer)的变更通常不被支持,因为这可能导致数据丢失或索引不一致。

更新方法

映射更新通常通过PUT请求到索引的_mapping API来完成。例如,为my_index索引添加一个新的字段映射:

curl -X PUT "localhost:9200/my_index/_mapping" -H 'Content-Type: application/json' -d'
{
  "properties": {
    "new_field": { "type": "date" }
  }
}'

注意事项

  • 更新映射可能引起索引重新打开,对查询性能有短暂影响。
  • 对于大规模生产环境,映射更新应谨慎进行,避免对在线服务造成影响。
  • 使用PUT更新映射时,若已有字段的映射与请求中不一致,可能会导致错误,除非使用ignore_conflicts参数。
3.3.5 映射最佳实践
  • 前期规划:尽可能在索引创建前明确映射,减少后期修改映射的需求。
  • 动态映射控制:根据数据特点,合理设置动态映射的策略,避免不必要的字段自动创建。
  • 定期审查:随着数据模式的演进,定期审查映射,确保其符合当前数据需求,优化存储和查询性能。
  • 备份映射:在进行重大映射更改前,备份当前映射,以便于回滚或参考。

通过细致的映射管理,不仅可以提升Elasticsearch的性能,还能确保数据的准确性和一致性,为复杂的数据查询和分析提供坚实的基础。

小结

本章涵盖了Elasticsearch中索引与文档操作的核心知识点,从基础的索引创建到文档的CRUD操作,再到映射的管理,为数据的存储和检索奠定了基础。掌握了这些基本技能,你将能够有效管理Elasticsearch中的数据。下一章《第4章 查询与过滤》,将深入探讨如何高效地从Elasticsearch中检索数据,包括使用各种查询语法和过滤条件来精准定位所需信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新勒索软件 Shinra 与 Limpopo 浮出水面

Shinra 勒索软件概览 Shinra 勒索软件的样本文件最早在 2024 年 4 月提交给公开的文件扫描服务。攻击者在部署和运行勒索软件前会先窃取受害者的数据,还会删除卷影副本以阻止数据恢复。 攻击者有时会使用亚文化的人物来进行命名,研究人员也怀疑 Shinra…

clion远程开发

clion远程开发 简要概括: 建立 SFTP 通讯,创建远程目录与本地目录的映射文件夹,就可以把本机文件夹中的文件用鼠标右键选中上全传,打开自动同步功能,后面更改文件就可以自动同步文件了。 一.新建SFTP远程链接服务 …

C++感受12-Hello Object 派生版

不变的功能,希望直接复用原有代码;变化的功能,希望在分开的代码里实现。 派生的基本概念和目的如何定义派生类以及创建派生对象派生对象的生死过程 0. 课堂视频 ff14-HelloObject-派生版 1. 派生的基本概念与目的 编程,或者说软…

无线领夹麦克风可以唱歌吗?推荐多款收音好的无线麦克风

如今是一个短视频营销飞速发展的时代,越来越多自媒体人通过短视频的方式来进行直播带货、生活Vlog、线上K歌等,记录下生活里那美丽的瞬间。不过也有不少新手视频创作者存在疑问:无线领夹麦克风可以唱歌吗? 答案是可以的&#xff0…

前端技术(二)——javasctipt 介绍

一、javascript基础 1. javascript简介 ⑴ javascript的起源 ⑵ javascript 简史 ⑶ javascript发展的时间线 ⑷ javascript的实现 ⑸ js第一个代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>…

SSM“点点通”餐饮点餐小程序-计算机毕业设计源码11264

摘要 随着中国经济的飞速增长&#xff0c;消费者的智能化水平不断提高&#xff0c;许多智能手机和相关的软件正在得到更多的关注和支持。其中&#xff0c;微信的餐饮点餐小程序更是深得消费者的喜爱&#xff0c;它的出现极大地改善了消费者的生活质量&#xff0c;同时&#xf…

电商价格监测:品牌控价维权的关键利器

品牌在进行控价时&#xff0c;所面对的是线上成千上万条的商品链接&#xff0c;如果仅依靠人工&#xff0c;根本无法做到准确且全面地完成电商价格监测工作。因此&#xff0c;一套准确率高的电商价格监测系统对于品牌的控价维权而言&#xff0c;其重要性不言而喻。 在形形色色的…

昇思25天学习打卡营第八天|保存与加载

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第八天了。 今天是第八天&#xff0c;前七天的学习内容可以看链接 昇思25天学习打卡营第一天|快速入门 昇思25天学习打卡营第二天|张量 Tensor 昇思25天学习打卡营第三天|数据集Dataset 昇思25天…

GPT-5:下一代AI如何彻底改变我们的未来

GPT-5 发布前瞻&#xff1a;技术突破与未来展望 随着科技的飞速发展&#xff0c;人工智能领域不断迎来新的突破。根据最新消息&#xff0c;OpenAI 的首席技术官米拉穆拉蒂在一次采访中确认&#xff0c;GPT-5 将在一年半后发布&#xff0c;并描述了其从 GPT-4 到 GPT-5 的飞跃如…

分布式限流:Spring Cloud Gateway 限流

分布式限流&#xff1a;Spring Cloud Gateway 限流 在现代微服务架构中&#xff0c;流量控制是一个至关重要的部分。分布式限流作为一种有效的流量控制手段&#xff0c;能够帮助我们保护系统不被突发的流量冲垮。Spring Cloud Gateway支持多种限流方式。 什么是分布式限流 分…

嵌入式UI开发-lvgl+wsl2+vscode系列:8、控件(Widgets)(一)

一、前言 这里将介绍一系列控件&#xff0c;了解后就可以开始基础的开发了。 二、示例 1、Base Obj&#xff08;基础对象&#xff09; 1.1、示例1 #include "../../lv_examples.h" #if LV_BUILD_EXAMPLESvoid lv_example_obj_1(void) {lv_obj_t * obj1;obj1 lv…

商城积分系统的代码实现(下)-- 积分订单的退款与结算

一、接着上文 用户在消耗积分的时候&#xff0c;需要根据一定的逻辑&#xff0c;除了扣减账户的当前余额&#xff0c;还需要依次消费积分订单的余额。 private void updatePointsOrderByUse(Integer schoolId, Long userId, String pointsType, int usingPoints) {List<Po…

springboot+vue 开发记录(八) 前端项目打包

本篇文章涉及到前端项目打包的一些说明 我打包后的项目在部署到服务器上后&#xff0c;访问页面时按下F12出现了这种情况&#xff1a; 它显示出了我的源码&#xff0c;这是一种很不安全的行为 该怎么办&#xff1f;很简单&#xff1a; 我们只需要下载一点点插件&#xff0c;再…

怎样查看vsphere client 的登录日志

- 问题摘要&#xff1a; 怎样查看vsphere client 的登录日志 - 解决方案/工作方法 1.登录vsphere client > vc > Monitor > Tasks and Events > Events, 查看日志 2. 查看VC 的websso.log日志 /var/log/vmware/sso/websso.log 3. 可以把websso.log文件拿到本地电…

苏东坡传-读书笔记六

苏东坡今生的浩然之气用尽。人的生活也就是心灵的生活&#xff0c;这种力量形成人的事业人品&#xff0c;与生命俱来&#xff0c;由生活中之遭遇而显示其形态。正如苏东坡在潮州韩文公庙碑中所说&#xff1a;“浩然之气、不依形而立&#xff0c;不恃力而行&#xff0c;不待生而…

智能驾驶系列报告:特斯拉智能驾驶方案简剖

不同于绝大多数国内车企在自动驾驶上采取多传感器融合方案&#xff0c;特斯拉FSD在发展初期就摒弃激光雷达、且不配备高清地图&#xff0c;成为在感知层以摄像头为核心的纯视觉解决方案代表;其依靠车身搭载的摄像头来捕捉周围的环境信息&#xff0c;并经过算法及神经网络模型处…

手机ip地址是实时位置吗

在数字时代&#xff0c;手机IP地址对于许多用户而言&#xff0c;似乎是一个既神秘又重要的存在。不少人都曾听说过&#xff0c;通过追踪IP地址可以定位到某个人的大致位置。那么&#xff0c;手机IP地址真的是实时位置的精确反映吗&#xff1f;本文将带您深入了解手机IP地址的真…

「网站开发必备」8款免费 React Gallery, Lightbox, 和 Photo Viewer开发库

大家好&#xff0c;今天给大家分8款免费 React Gallery, Lightbox, 和 Photo Viewer开发库。 在不断发展的网络开发世界中&#xff0c;开源库提供了大量创新和效率的机会。本文将带您了解一些用于Gallery, Lightbox, 和 Photo Viewer的最好的开源 React 库&#xff0c;为您的下…

2.00004 优化器执行计划生成的流程是怎么样的?

文章目录 整体架构关键结构体PlannerInfo (pathnodes.h:195)PlannerGlobal (pathnodes.h:95)函数栈关键函数pg_plan_query (postgres.c:885)planner (planner.c:274)standard_planner (planner.c:287)subquery_planner (planner.c:628)整体架构 关键结构体 PlannerInfo (pathn…

基于CST2024 Python内部环境的双锥天线自动3D建模和仿真

CST Studio Suite 2024版里面的Python相较于之前有了大的变化。 第一&#xff0c; 增加了cst.asymptotic &#xff0c;cst.radar &#xff0c;cst.units 三个包。 第二&#xff0c;之前CST python只能通过外部环境去操作&#xff0c;现在增加了内部环境控制&#xff0c;可以内…