【Elasticsearch基础】基本核心概念介绍

Elasticsearch作为当前最流行的分布式搜索和分析引擎,其强大的功能背后是一套精心设计的核心概念体系。本文将深入解析Elasticsearch的五大核心概念,帮助开发者构建坚实的技术基础,并为高效使用ES提供理论支撑。

1 索引(Index)与文档(Document)

1.1 索引:数据的逻辑容器

在Elasticsearch中,索引(Index)*是最高层次的数据组织单位,相当于传统数据库中的"数据库"概念。但与传统数据库不同,ES索引具有以下特点:
  • 动态模式:字段类型可以在写入时自动识别(可通过映射关闭)
  • 分布式存储:数据自动分布在集群的多个节点上
  • 优化设计:专为搜索性能优化的数据结构
// 创建索引示例
PUT /test
{"settings": {"number_of_shards": 3,"number_of_replicas": 1}
}
// 查看索引 
GET /test

1.2 文档:数据的基本单元

文档(Document):是ES中可被索引的最小数据单元,采用JSON格式表示:
  • 每个文档有唯一ID(可自动生成)
  • 文档包含多个字段(Field)
  • 文档元数据包括:_index, _type, _id, _version等
// 插入文档
POST /test/_doc/01
{"name": "智能手机","price": 3999,"description": "旗舰级配置","tags": ["电子","数码"]
}
// 查看文档 
GET /test/_doc/01
索引与传统数据库对比:

概念

Elasticsearch

传统RDBMS

数据容器

索引(Index)

数据库(Database)

数据记录

文档(Document)

行(Row)

数据模式

映射(Mapping)

表结构(Schema)

2 分片(Shard)与副本(Replica)

2.1 分片:分布式存储的基础

分片(Shard):是Elasticsearch实现分布式特性的核心机制:
  • 横向扩展:索引被分成多个分片,分散在不同节点
  • 容量限制:单个分片推荐不超过50GB数据(实际取决于硬件)
  • 主分片(Primary):负责处理索引和搜索请求
  • 不可变性:分片数量在创建索引后不可更改
// 创建带分片的索引
PUT /testindex
{"settings": {"number_of_shards": 3,"number_of_replicas": 1}
}
// 查看索引分片 
GET _cat/shards/testindex?v

2.2 副本:高可用的保障

副本(Replica):是分片的拷贝,主要具备如下特性
  • 数据冗余:防止硬件故障导致数据丢失
  • 读取扩展:搜索请求可以在所有副本上并行执行
  • 故障转移:当主分片不可用时,副本可提升为主分片
// 查看分片分配情况 
GET /_cat/shards/test?v

分片策略最佳实践
  • 根据数据量预估总分片数(每分片30-50GB)
  • 生产环境至少1个副本
  • 分片数应与集群节点数协调(避免分配不均)

3 映射(Mapping)与字段类型

3.1 映射:数据结构的定义

映射(Mapping):定义了文档及其字段的存储和索引方式
  • 字段数据类型:text, keyword, date, long等
  • 索引控制:是否可搜索、是否存储原始值
  • 分析器指定:如何处理文本内容
// 基础文本映射
PUT /test3
{"mappings": {"properties": {"title": { "type": "text" }, "views": { "type": "integer" },"publish_date": { "type": "date" }}}
}

3.2 核心字段类型详解

3.2.1 Text vs Keyword

  • Text:用于全文搜索,会被分词
  • Keyword:用于精确匹配,如过滤、聚合

3.2.2 特殊类型

  • Geo_point:经纬度坐标
  • Nested:嵌套对象(保持数组元素间关系)
  • Join:定义父子文档关系

3.2.3 多字段(Multi-fields)

  • 允许一个字段以不同方式索引
"product_id": {"type": "keyword","fields": {"analyzed": { "type": "text" }}
}

4 总结

深入理解Elasticsearch这些基础核心概念,是构建高效搜索解决方案的基础。在实际应用中,需要根据具体业务场景灵活组合这些特性。后续我们将深入探讨查询DSL、聚合分析等高级主题。

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

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

相关文章

Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值

在 Qt 中直接使用 drmModeObjectSetProperty 设置 Plane 的 zpos 值需要结合 Linux DRM/KMS API 和 Qt 的底层窗口系统(如 eglfs 平台插件)。以下是详细步骤和代码示例: 1. 原理说明 DRM/KMS 基础: Plane:负责图层合成…

MFC添加免费版大漠3.1233

先创建一个MFC工程, 添加dm.dll 方法一:通过类向导-添加类-类型库中的MFC类-文件,选择dm.dll,如果没有"添加类型库中的MFC类"选项就用方法二添加 方法二:添加-新建项-MFC-Active或TypeLib-实现接口位置选…

【Linux】应用层协议 HTTP

应用层协议 HTTP 一. HTTP 协议1. URL 地址2. urlencode 和 urldecode3. 请求与响应格式 二. HTTP 请求方法1. GET 和 POST (重点) 三. HTTP 状态码四. HTTP 常见报头五. 手写 HTTP 服务器 HTTP(超文本传输协议)是一种应用层协议,用于在万维网…

【活动回顾】StarRocks Singapore Meetup #2 @Shopee

3 月 13 日,StarRocks 社区在新加坡成功举办了第二场 Meetup 活动,主题为“Empowering Customer-Facing Analytics”。本次活动在 Shopee 新加坡办公室举行,吸引了来自 Shopee、Grab 和 Pinterest 的专家讲师以及 50 多位参会者。大家围绕电商…

Retinexformer:基于 Retinex 的单阶段 Transformer 低光照图像增强方法

开头发点牢骚:本来做的好好都都要中期了,导师怎么突然给我换题目啊。真是绷不住了......又要从头开始学了,唉! 原论文链接:Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement 低光…

后端——AOP异步日志

需求分析 在SpringBoot系统中,一般会对访问系统的请求做日志记录的需求,确保系统的安全维护以及查看接口的调用情况,可以使用AOP对controller层的接口进行增强,作日志记录。日志保存在数据库当中,为了避免影响接口的响…

flink广播算子Broadcast

文章目录 一、Broadcast二、代码示例三.或者第二种(只读取一个csv文件到广播内存中)提示:以下是本篇文章正文内容,下面案例可供参考 一、Broadcast 为了关联一个非广播流(keyed 或者 non-keyed)与一个广播流(BroadcastStream),我们可以调用非广播流的方法 connect(),…

Redis 和 MySQL双写一致性的更新策略有哪些?常见面试题深度解答。

目录 一. 业务数据查询,更新顺序简要分析 二. 更新数据库、查询数据库、更新缓存、查询缓存耗时对比 2.1 更新数据库(最慢) 2.2 查询数据库(较慢) 2.3 更新缓存(次快) 2.4 查询缓存&#…

SRT协议

SRT(Secure Reliable Transport)是一种开源的视频传输协议,专为高丢包、高延迟网络环境设计,结合了UDP的低延迟和TCP的可靠性,广泛应用于直播、远程制作、视频会议等场景。 定位:SRT协议的官方C/C实现库&am…

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…

npm install 卡在创建项目:sill idealTree buildDeps

参考&#xff1a; https://blog.csdn.net/PengXing_Huang/article/details/136460133 或者再执行 npm install -g cnpm --registryhttps://registry.npm.taobao.org 或者换梯子

c++中cpp文件从编译到执行的过程

C 文件从编写到执行的过程可以分为几个主要阶段&#xff1a;编写代码、预处理、编译、汇编、链接和运行。以下是每个阶段的详细说明&#xff1a; 1. 编写代码 这是整个过程的起点。程序员使用文本编辑器&#xff08;如 VSCode、Sublime Text 或其他 IDE&#xff09;编写 C 源…

PROE 与 STL 格式转换:开启 3D 打印及多元应用的大门

在 3D 设计与制造的复杂生态中&#xff0c;将 PROE 格式转换为 STL 格式绝非无端之举&#xff0c;而是有着深厚且多元的现实需求作为支撑。 一、文件格式介绍​ &#xff08;一&#xff09;PROE 格式​ PROE 作为一款参数化设计软件&#xff0c;采用基于特征的参数化建模技术…

开发中后端返回下划线数据,要不要统一转驼峰?

先说结论。看情况&#xff01;&#xff01;&#xff01;&#xff01; 前端 主要用 JS/TS 建议后端返回 camelCase&#xff0c;减少前端转换成本。后端 主要是 Python/Go 建议保持 snake_case&#xff0c;前端做转换。但是团队统一风格最重要&#xff01;如果统一返回驼峰就驼峰…

docker pull时报错:https://registry-1.docker.io/v2/

原文&#xff1a;https://www.cnblogs.com/sdgtxuyong/p/18647915 https://www.cnblogs.com/OneSeting/p/18532166 docker 换源&#xff0c;解决连接不上的问题。 编辑以下文件&#xff0c;不存在则创建&#xff1a; vim /etc/docker/daemon.json {"registry-mirrors&qu…

Pytorch学习笔记(十二)Learning PyTorch - NLP from Scratch

这篇博客瞄准的是 pytorch 官方教程中 Learning PyTorch 章节的 NLP from Scratch 部分。 官网链接&#xff1a;https://pytorch.org/tutorials/intermediate/nlp_from_scratch_index.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m 提取码: …

基础算法02——冒泡排序(Bubble Sort)

冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序&#xff1a;是一种简单的排序算法&#xff0c;其基本思想是通过重复遍历要排序的列表&#xff0c;比较相邻的元素&#xff0c;并在必要时&#xff08;即前面的数比后面的数大的时候&#xff09;交换它们的位置&#xff…

RestTemplate远程调用接口方式

1.Post(body空参) 也就是说需要给一个空的json 代码: String getDeviceUrl this.MOVABLE_URL "detected-data/getMachineLists"; // 远程调用 RestTemplate restTemplate new RestTemplate(); restTemplate.getMessageConverters().set(1,new StringHttpMessageC…

ar头显和眼镜图像特效处理

使用一个线程从摄像头或者其他设备循环读取图像数据写入链表&#xff0c;另一个线程从链表循环读取数据并做相应的特效处理&#xff0c;由于写入的速度比读取的快&#xff0c;最终必然会因为写入过快导致线程读写一帧而引发冲突和数据帧正常数据帧被覆盖。最好使用共享内存&…

mysql--socket报错

错误原因分析 MySQL 服务未运行&#xff08;最常见原因&#xff09; 错误中的 (2) 表示 “No such file or directory”&#xff0c;即 /tmp/mysql.sock 不存在这通常意味着 MySQL 服务器根本没有启动 socket 文件路径不匹配 客户端尝试连接 /tmp/mysql.sock但 MySQL 服务器可…