Elasticsearch:基础概念

news2025/1/8 12:33:03

这里写目录标题

  • 一、什么是Elasticsearch
    • 1、基础介绍
    • 2、什么是全文检索
    • 3、倒排索引
    • 4、索引
      • (1)创建索引
        • a 创建索引基本语法
        • b 只定义索引名,setting、mapping取默认值
        • c 创建一个名为student_index的索引,并设置一些自定义字段
      • (2)删除索引
      • (3)查询索引
      • (4)修改索引
        • a 动态更新索引的settings部分
        • b 动态更新索引的部分mapping字段信息
        • c 向student_index 添加一个名为grade的新字段,类型为Integer,并将副本数量更新为2.
    • 5、映射
    • 6、文档基本操作
      • (1)新增文档
        • a 新增单个文档
        • b 批量新增文档
      • (2)查询文档
      • (3)删除文档
      • (4)更新文档
    • 7、索引别名
      • (1)为什么需要别名
      • (2)如何为索引添加别名
      • (3)多索引检索的实现方案
        • a 不适用别名的方案
        • b 使用别名的方案
        • c 思考:使用别名和基于索引的检索效率是一样的吗?
  • 二、分片
  • 三、副本(Replicas)
  • 四、分配Allocation
  • 五、系统架构
  • 六、故障转移
  • 七、水平扩容

一、什么是Elasticsearch

1、基础介绍

Elasticsearch是基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产规模工作负载的速度和相关性进行了优化。使用 Elasticsearch 可以近乎实时地搜索、索引、存储和分析各种形状和大小的数据。Elasticsearch 是Elastic Stack的核心。它与Kibana相结合,为以下 Elastic 解决方案提供支持:

  • 可观察性

    • 日志、指标和跟踪:收集、存储和分析来自应用程序、系统和服务的日志、指标和跟踪。
    • 应用程序性能监控 (APM):监控和分析业务关键型软件应用程序的性能。
    • 真实用户监控 (RUM):监控、量化和分析用户与 Web 应用程序的交互。
    • OpenTelemetry:重复使用您现有的仪器,使用 OpenTelemetry 标准将遥测数据发送到 Elastic Stack。
  • 搜索加粗样式

    • 全文搜索:使用倒排索引、标记化和文本分析构建快速、相关的全文搜索解决方案。
    • 向量数据库:存储和搜索向量化数据,并使用内置和第三方自然语言处理 (NLP) 模型创建向量嵌入。
    • 语义搜索:使用同义词、密集向量嵌入和学习到的稀疏查询文档扩展等工具了解搜索查询背后的意图和上下文含义。
    • 混合搜索:使用最先进的排名算法将全文搜索与向量搜索相结合。
    • 构建搜索体验:向应用程序或网站添加混合搜索功能,或在组织的内部数据源上构建企业搜索引擎。
    • 检索增强生成 (RAG):使用 Elasticsearch 作为检索引擎,为一系列用例提供更相关、最新或专有的数据来补充生成式 AI 模型。
    • 地理空间搜索:使用地理空间查询搜索位置并计算空间关系。
  • 安全

    • 安全信息和事件管理 (SIEM):收集、存储和分析来自应用程序、系统和服务的安全数据。
    • 端点安全:监控和分析端点安全数据。
    • 威胁搜寻:搜索和分析数据以检测和应对安全威胁。

2、什么是全文检索

全文检索(Full-Text Search)是一种从大量文本数据中快速检索出包含指定词汇或短语的信息的技术。

3、倒排索引

倒排索引实现方式:

  • 文档预处理。
  • 构建词典。
  • 创建倒排列表。
  • 存储索引文件。
  • 查询处理。

4、索引

类似mysql中的表。

(1)创建索引

a 创建索引基本语法

PUT /index_name

{
    "settings": {
		// 索引设置
    },
    "mappings": {
        "propertis": {
			// 字段映射
        }
    }
}

必要的参数

  • 索引名称
    索引名称必须是小写字母,可以包含数字和下划线。
  • 索引设置(settings)
    • 分片数量(number of shards) :一个索引的分片数决定了索引的并行度和数据分布。
      示例:“number_of_shards”:1

    • 副本数量(number of replicas):副本提高了数据的可用性和容错能力。
      示例:“number_of_replicas”:1

  • 映射(mapping)
    字段属性(properties)定义索引中文档的字段及其类型。常用字段类型包括:text, keyword,Integer,float,date等。
b 只定义索引名,setting、mapping取默认值
c 创建一个名为student_index的索引,并设置一些自定义字段
{
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1
    },
    "mappings": {
        "properties": {
            "name": {
                "type": "text"
            },
            "age": {
                "type": "integer"
            },
            "enrolled_date": {
                "type": "date"
            }
        }
    }
}

(2)删除索引

删除索引会删除该索引下的所有文档和相关的元数据。
删除索引的基本语法如下:
DELETE /index_name

(3)查询索引

GET / index_name

(4)修改索引

a 动态更新索引的settings部分

PUT /index_name/_settings

{
    "index": {
        "setting_name": "setting_value"
    }
}
b 动态更新索引的部分mapping字段信息

PUT /index_name/_mapping

{
    "properties": {
        "new_field": {
            "type": "field_type"
        }
    }
}
c 向student_index 添加一个名为grade的新字段,类型为Integer,并将副本数量更新为2.

5、映射

6、文档基本操作

类似mysql表中的一行记录。

(1)新增文档

a 新增单个文档

在ES8.x中,新增文档的操作可以通过POST或PUT请求完成,具体取决于是否指定了文档的唯一性标识(即ID)。如果在创建数据时指定了唯一性标识,可以使用POST或PUT请求;如果没有指定唯一性标识,只能使用POST请求。

使用POST请求新增文档:
当不指定文档ID时,可以使用POST请求来新增文档,Elasticsearch会自动生成一个唯一ID。语法如下:
POST /index_name/_doc

{
	"field1":"value1",
	"field2":"value2"
}

使用PUT请求新增文档:
当指定了文档的唯一标识(ID)时,可以使用PUT请求来新增或更新文档。如果指定额ID在索引中不存在,则会创建一个新文档;如果已经存在,则会替换现有文档,语法如下:
PUT /index_name/document_id

{
	"field1":"value1",
	"field2":"value2"
}

在Elasticsearch8.x中,PUT和POST请求在新增文档的行为有所不同,主要体现在以下几个方面:

  • 指定文档ID

    • PUT请求在创建或更新文档时必须指定文档的唯一ID。如果指定的ID已经存在,PUT请求会替换现有的文档;如果不存在,则创建一个新文档。
    • POST请求在创建新文档时可以指定ID,也可以不指定。如果不指定ID,Elasticsearch会自动生成一个唯一的ID。
  • 幂等性

    • PUT请求是幂等的,这意味着多次执行相同的PUT请求,即使是针对同一个文档,最终的结果都是一致的。
    • POST请求不是幂等的,多次执行相同的POST请求可能会导致创建多个文档。
  • 更新行为

    • PUT请求在更新文档时会替换整个文档的内容,即使是文档中未更改的部分也会被新内容覆盖。
    • POST请求在更新文档时可以使用_update API,这样可以只更新文档中特定字段,而不是替换整个文档。
b 批量新增文档

批量新增文档可以减少网络连接所产生的开销,提升性能:

  • 支持一次API调用中,对不同的索引进行操作。
  • 操作中单条操作失败,并不会影响其他操作。
  • 返回结果包括每一条操作执行的结果。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(2)查询文档

(3)删除文档

(4)更新文档

7、索引别名

(1)为什么需要别名

索引别名可以指向一个或多个索引,并且可以在任何需要索引名称的API中使用。别名提供了极大的灵活性,它允许用户执行以下操作:

  • 在正在运行的集群上的一个索引和另一个索引之间进行透明切换。
  • 对多个对象进行分组组合。
  • 在索引中的文档子集上创建视图,结合业务场景,缩小检查范围,自然会提升检索效率。

(2)如何为索引添加别名

  • 创建索引的时候可以指定别名

  • 为已有索引添加别名:要为现有的索引添加别名,可以使用_aliases API:
    POST /_aliases

{
    "actions": [
        {
            "add": {
                "index": "index_name",
                "alias": "alias_name"
            }
        }
    ]
}

(3)多索引检索的实现方案

a 不适用别名的方案
  • 方式一:使用逗号对多个索引名称进行分割
    POST index1,index2,index3,index4/_search

  • 方式二:使用通配符进行多索引检索
    POST index*/_search

b 使用别名的方案
  • 使用别名关联已有索引
    在这里插入图片描述

  • 使用别名进行检索
    POST alias_name/_search

c 思考:使用别名和基于索引的检索效率是一样的吗?

若索引和别名指向相同,则在相同检索条件下的检索效率是一致的,因为索引别名只是物理索引的软连接的名称而已。
注意:

  • 对相同索引别名的物理索引建议有一致的映射,以提升检索效率。
  • 推荐充分发挥索引别名在检索方面的优势,但在写入和更新时还得使用物理索引。

二、分片

一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有10亿文档数据的索引占据1TB的磁盘空间,而任一节点都可能没有这样大的磁盘空间。后者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多分的能力,每一份就称之为分片。当创建一个索引的时候,可以指定分片的数量。每隔分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。分片的重要性,主要有两方面:

  • 允许水平分割、扩展内容容量。
  • 允许分片之上进行分布式的、并行的操作,进而提高性能和吞吐量。
    至于一个分片怎样分布,文档怎样聚合和搜索请求,是完全右Elasticsearch管理的,对于作为用户来说,这个是透明的,无需关心。

三、副本(Replicas)

在一个网络、云环境里,失败随时都可能发生,在某个分片、节点处于离线或者消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为了此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这个拷贝就叫做复制分片(副本)。

复制分片之所以重要,有两个主要原因:

  • 在分片或者节点失败的情况下,提供了可用性。所以副本分片不能与主分片在同一个节点上。
  • 扩展你的搜索量、吞吐量,因为搜索可以在所有的副本上并行运行。

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。

分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。

默认情况下,Elasticsearch 中的每个索引被分片 1 个主分片和 1 个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有 1 个主分片和另外 1 个复制分片(1 个完全拷贝),这样的话每个索引总共就有 2 个分片, 我们需要根据索引需要确定分片个数。

四、分配Allocation

将分片分配给某个节点的过程,包括分配主分片或者副分片。如果是副本,还包括从主分片复制数据的过程。这个过程是由master节点完成的。

五、系统架构

在这里插入图片描述
当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、
删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。

作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道
任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的。

六、故障转移

当集群中只有一个节点在运行时,意味着会有一个单点故障问题——没有冗余。 幸运的是,我们只需再启动一个节点即可防止数据丢失。当你在同一台机器上启动了第二个节点时,只要它和第一个节点有同样的 cluster.name 配置,它就会自动发现集群并加入到其中。但是在不同机器上启动节点的时候,为了加入到同一集群,你需要配置一个可连接到的单播主机列表。之所以配置为使用单播发现,以防止节点无意中加入集群。只有在同一台机器上
运行的节点才会自动组成集群。

如果启动了第二个节点,集群将会拥有两个节点 : 所有主分片和副本分片都已被分配 。
在这里插入图片描述

七、水平扩容

怎样为我们的正在增长中的应用程序按需扩容呢?当启动了第三个节点,我们的集群将会拥有三个节点的集群 : 为了分散负载而对分片进行重新分配 。
在这里插入图片描述

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

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

相关文章

RAG Logger:RAG日志记录工具

您听说过 RAG Logger 吗? 它是一款专为检索增强生成 (RAG) 应用程序设计的开源日志记录工具! 据说它可以作为 LangSmith 的轻量级替代方案,满足 RAG 特定的日志记录需求。 查询、搜索结果、LLM 交互和性能指标可以以 JSON 格式记录。 特点 …

Spark-Streaming有状态计算

一、上下文 《Spark-Streaming初识》中的NetworkWordCount示例只能统计每个微批下的单词的数量,那么如何才能统计从开始加载数据到当下的所有数量呢?下面我们就来通过官方例子学习下Spark-Streaming有状态计算。 二、官方例子 所属包:org.…

gesp(C++四级)(4)洛谷:B3851:[GESP202306 四级] 图像压缩

gesp(C四级)(4)洛谷:B3851:[GESP202306 四级] 图像压缩 题目描述 图像是由很多的像素点组成的。如果用 0 0 0 表示黑, 255 255 255 表示白, 0 0 0 和 255 255 255 之间的值代表不同程度的灰色&#xff0…

链地址法(哈希桶)

链地址法(哈希桶) 解决冲突的思路 开放定址法中所有的元素都放到哈希表⾥,链地址法中所有的数据不再直接存储在哈希表中,哈希表 中存储⼀个指针,没有数据映射这个位置时,这个指针为空,有多个数…

【通识安全】煤气中毒急救的处置

1.煤气中毒的主要症状与体征一氧化碳中毒,其中毒症状一般分为轻、中、重三种。 (1)轻度:仅有头晕、头痛、眼花、心慌、胸闷、恶心等症状。如迅速打开门窗,或将病人移出中毒环境,使之吸入新鲜空气和休息,给些热饮料&am…

Synthesia技术浅析(二):虚拟人物视频生成

Synthesia 的虚拟人物视频生成模块是其核心技术之一,能够将文本输入转换为带有同步语音和口型的虚拟人物视频。该模块如下所示: 1.文本输入处理 2.语音生成(TTS, Text-to-Speech) 3.口型同步(Lip Syncing&#xff0…

【算法】算法初步

要学好数据结构和算法的设计与分析,请务必先打好C语言基础,因为C语言中的数据存储、内存映射、指针等等概念最接近计算机的底层原理,数据结构是数据在内存空间当中的组织形式,而算法则是提供了解决某个问题的一种思路,…

年会抽奖Html

在这里插入图片描述 <!-- <video id"backgroundMusic" src"file:///D:/background.mp3" loop autoplay></video> --> <divstyle"width: 290px; height: 580px; margin-left: 20px; margin-top: 20px; background: url(D:/nianhu…

LLM 实现Malleable 软件

All computer users may soon have the ability to author small bits of code. What structural changes does this imply for the production and distribution of software? 如果每个终端用户都能修改一部分代码&#xff0c; 这个将会对软件的生产和分发有何重大改变&#…

国产编辑器EverEdit - 两种删除空白行的方法

1 使用技巧&#xff1a;删除空白行 1.1 应用场景 用户在编辑文档时&#xff0c;可能会遇到很多空白行需要删除的情况&#xff0c;比如从网页上拷贝文字&#xff0c;可能就会存在大量的空白行要删除。 1.2 使用方法 1.2.1 方法1&#xff1a; 使用编辑主菜单 选择主菜单编辑 …

出租号平台网站系统源码/单合租用模式 提供用户提现功能

这是一款租号平台源码&#xff0c;采用常见的租号模式对接的易支付。目前网络上还很少见到此类类型的源码。 程序采用thinkphp6.0开发&#xff0c;前端采用layui 程序开发&#xff1a;PHPMySQL 程序演示&#xff1a;zh1.yetukeji.top, 账户 13112215717 &#xff0c;密码qq2…

C++:位与运算符

& 一&#xff0c;位与运算符的运算规则 有0则0。 二&#xff0c;判断奇偶性 %&#xff1a;优先级高&#xff0c;效率低 &&#xff1a;优先级低&#xff0c;效率高 数与1的位与运算结果为1则为奇数&#xff0c;结果为0则为偶数 三&#xff0c;获取一个数二进制的后…

第 31 章 - 源码篇 - Elasticsearch 写入流程深入分析

写入源码分析 接收与处理 请求首先会被 Netty4HttpServerTransport 接收&#xff0c;接着交由 RestController 进行路由分发。 private void tryAllHandlers(final RestRequest request, final RestChannel channel, final ThreadContext threadContext) throws Exception {…

C语言----指针

目录 1.概念 2.格式 3.指针操作符 4.初始化 1. 将普通变量的地址赋值给指针变量 a. 将数组的首地址赋值给指针变量 b. 将指针变量里面保存的地址赋值给另一个指针变量 5.指针运算 5.1算术运算 5.2 关系运算 指针的大小 总结&#xff1a; 段错误 指针修饰 1. con…

Java高频面试之SE-09

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; final关键字有什么作用&#xff1f; 在 Java 中&#xff0c;final 关键字有多个用途&#xff0c;它可以用于类、方法和变量。根据使用的上…

ChatGPT 主流模型GPT-4/GPT-4o mini的参数规模是多大?

微软论文又把 OpenAI 的机密泄露了&#xff1f;&#xff1f;在论文中明晃晃写着&#xff1a; o1-preview 约 300B&#xff1b;o1-mini 约 100BGPT-4o 约 200B&#xff1b;GPT-4o-mini 约 8BClaude 3.5 Sonnet 2024-10-22 版本约 175B微软自己的 Phi-3-7B&#xff0c;这个不用约…

某纪检工作委员会视频监控网络综合运维项目

随着某纪检工作委员会信息化建设的不断深入&#xff0c;网络基础设施的数量持续增加&#xff0c;对网络设备的运维管理提出了更为复杂和艰巨的要求。为了确保这些关键信息基础设施能够安全稳定地运行&#xff0c;该纪检工作委员会决定引入智能化运维管理系统&#xff0c;以科技…

显示器太薄怎么用屏幕挂灯?使用前先了解屏幕挂灯的最佳角度

人们对用眼健康的重视以及数字化办公和娱乐的普及&#xff0c;屏幕挂灯作为一种能够有效减少屏幕反光、保护眼睛的照明设备&#xff0c;受到了越来越多消费者的青睐。随着科技的进步&#xff0c;显示器设计日益轻薄&#xff0c;为我们的桌面节省了空间并带来了美观的视觉效果。…

HTTP/HTTPS ②-Cookie || Session || HTTP报头

这里是Themberfue 上篇文章介绍了HTTP报头的首行信息 本篇我们将更进一步讲解HTTP报头键值对的含义~~~ ❤️❤️❤️❤️ 报头Header ✨再上一篇的学习中&#xff0c;我们了解了HTTP的报头主要是通过键值对的结构存储和表达信息的&#xff1b;我们已经了解了首行的HTTP方法和UR…

excel快速计算周数的方法

业务中经常要通过周汇总计算&#xff0c;为方便后续汇总在源数据引入“周”列 公式&#xff1a; "W"&IF((ROW()1)/7<1,1,ROUNDUP((ROW()1)/7,0))函数释义&#xff1a; ①一周有7天&#xff0c;如果1月1号刚好是从周一开始&#xff0c;那么计算周数可以简单得…