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

在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/775209.html

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

相关文章

Linux系统的基础知识和常用命令

1、什么是Linux? 是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行…

C++学习笔记二

一、常量 1.用const关键字声明常量变量 const常量变量在定义时必须进行初始化,并且不能通过赋值来改其值 const double gravity { 9.8 }; //首选在类型之前使用const int const sidesInSquare { 4 }; // “east const”风格,可以,但不是首…

Java实习手册(小白也看得懂)

秃狼说 距离俺发布的学习路线已经六个月了,那我给小伙伴的学习周期是四五个月左右,我相信大多的小伙伴已经学习的差不多了。正好赶上暑期实习的阶段,在暑期找到实习就成为暑期的头等大事。 实习经验在校招的起到决定性的作用,所…

单元测试Spring 上下文加载过程中遇到的阻塞或死锁问题

IDEA单元测试一直转圈,阻塞,前置后置的方法都不执行,无任何输出 1.单元测试类 SpringBootTest(classes {BareMetalApplication.class}) RunWith(SpringRunner.class) public class K8sUserNfsStoreInitServiceImplTest {BeforeEachpublic…

国家力推!国家人工智能产业标准化指南

在科技日新月异的今天,人工智能(AI)作为推动社会进步和产业升级的关键力量,正以前所未有的速度改变着我们的世界。从自动驾驶到智能制造,从智慧医疗到金融科技,人工智能的触角已经深入到了经济社会的各个角…

三万字带你一遍跑通uer

三万字带你一遍跑通uer 参考文档 今天给大家介绍个非常强大的项目uer,集成了许多可以做自然语言的东西,效果的话也非常好,很适合企业级的应用! 1. 先将项目uer从github拉取下来(zip或git都ok) 2. 用pycha…

linux查看当前文件夹的剩余空间

要查看当前文件夹所在的文件系统的剩余空间,并以GB为单位显示,可以使用以下命令: df -BG .其中: B:用于指定块大小(block size)。你可以通过指定后缀来改变输出的单位,如K&#xf…

船舶雷达与导航系统选择7/8防水插座的原因分析

概述 船舶雷达与导航系统在现代航海中扮演着至关重要的角色,它们为船舶提供准确的导航信息,确保航行的安全和效率。在这些系统中,7/8防水插座的使用尤为重要,因为它们能够在恶劣的海上环境中提供稳定的电力和信号连接。接下来&am…

Finding Global Homophily in Graph Neural Networks When Meeting Heterophily

本文发表于:ICML22 推荐指数: #paper/⭐⭐⭐ 问题背景: 异配图的邻接矩阵难以确定,以及异配图的计算复杂度开销大 可行的解决办法:高通滤波多跳邻居,GPRGNN(pagerank一类,各阶邻居的权重不同,ACM-GCN(高低通滤波,H2GCN(应该复杂度很大&…

《梦醒蝶飞:释放Excel函数与公式的力量》8.8 STDEVP函数

8.8 STDEVP函数 STDEVP函数是Excel中用于计算总体数据的标准偏差的函数。标准偏差是统计学中的一个重要指标,用于衡量数据集中各数值偏离平均值的程度。总体标准偏差考虑了整个数据集,而不是样本。 8.8.1 函数简介 STDEVP函数用于返回总体数据的标准偏…

Infinitar链游新发展新机遇

区块链游戏市场在近年来经历了显著增长,吸引了大量的投资和关注。随着加密货币和NFT(非同质化代币)概念的普及,越来越多的投资者、游戏开发者和看到了区块链技术在游戏领域的应用潜力,纷纷涌入市场。区块链游戏的用户量…

LeetCode 算法:二叉树的最近公共祖先 III c++

原题链接🔗:二叉树的最近公共祖先 难度:中等⭐️⭐️ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点…

Jackson与Json、Json和各种Java数据类型的互相转化

jackson是什么 json是最常用的数据交换格式 Jackson是最流行的Json库 首先对于这种JSON序列化的库其实有非常多,比如我们熟悉的Gson,Fastjson等等,当然技术没有完全的好坏,但是从使用情况和社区生态等方面综合看来,Ja…

uni-app x 跨平台开发框架

目录 uni-app x 是什么 和Flutter对比 uts语言 uvue渲染引擎 组合式API的写法 选项式API写法 页面生命周期 API pages.json全局配置文件 总结 uni-app x 是什么 uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。 uni-app x 是一个庞…

A4-C四驱高防轮式巡检机器人

在当今数字化和智能化迅速发展的时代,旗晟智能带来了一款革命性的创新产品——A4-C四驱高防轮式巡检机器人。这款机器人以其卓越的性能和多功能性,为工业巡检领域带来了全新的解决方案。 一、产品亮点 1、四驱动力与高防护设计 四驱高防轮式巡检机器人…

el-table封装点击列筛选行数据功能,支持筛选,搜索,排序功能

数据少的话&#xff0c;可以前端实现&#xff0c;如果多的话&#xff0c;建议还是请求接口比较合理父组件&#xff1a; <template> <div class"home"> <!-- <img alt"Vue logo" src"../assets/logo.png"> <HelloWorld …

重塑通信边界,基于ZYNQ7000 FPGA驱动的多频段多协议软件无线电平台

01、产品概述 本平台是基于高性能ZYNQ-7000系列中的XC7Z045处理器构建的多频段多协议软件无线电解决方案&#xff0c;集成了AD9364芯片——一款业界领先的1x1通道RF敏捷收发器&#xff0c;为无线通信应用提供了强大支持。其存储架构包括2路高速4GB DDR3内存、1路32GB EMMC存储以…

springboot dynamic配置多数据源

pom.xml引入jar包 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.2</version> </dependency> application配置文件配置如下 需要主要必须配置…

ASUS/华硕飞行堡垒8 FX506L FX706L系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;Windows10 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

【收藏级神丹】Liae384_刘亦菲_直播可用,平衡度最高的原创神丹,独家珍稀资源

Liae384_刘亦菲_DFL神丹&#xff1a;点击下载 此丹较重&#xff0c;小卡可以使用但不能训练&#xff0c;实测复训适合24G卡8G、12G、16G卡下载练好的专丹直接使用即可384的Liae对各类杂论视频兼容比较好&#xff0c;高参也能容忍高分辨率的DST复用方式: 非必要不用删除AB&…