当前位置: 首页 > news >正文

详细描述一下Elasticsearch索引文档的过程?

大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程?】面试题。希望对大家有帮助;

详细描述一下Elasticsearch索引文档的过程?

Elasticsearch的索引文档过程是其核心功能之一,涉及将数据存储到索引中,并使其可搜索。下面我将详细描述Elasticsearch中索引文档的流程:

1. 文档(Document)

  • 文档是Elasticsearch中存储数据的基本单位,类似于数据库中的一行记录。
  • 每个文档都是一个JSON对象,包含了数据的字段和值。

2. 索引(Index)

  • 索引是存储文档的地方,可以视为一个数据库,包含多个文档。每个文档在索引中有一个唯一的标识符(ID)。
  • Elasticsearch中的索引是分片的,可以包含多个分片,每个分片又是一个Lucene索引。

3. 索引文档的流程

索引文档的过程分为几个步骤:

3.1. 接收请求
  • 当你向Elasticsearch发送一个index请求时,Elasticsearch接收到请求后,会根据请求的目标索引(index)来决定该文档存储在哪个位置。
  • 这个请求通常是一个HTTP请求,通常如下所示:
    PUT /my_index/_doc/1
    {"title": "Elasticsearch Basics","content": "Elasticsearch is a distributed search engine."
    }
    
    上述请求向my_index索引中插入一条文档,文档的ID是1,内容是titlecontent字段。
3.2. 确定目标索引和文档ID
  • 目标索引:请求中指定了文档要存入的索引(如my_index)。
  • 文档ID:如果请求中指定了ID(如上例中的1),Elasticsearch会使用该ID;如果没有指定,Elasticsearch会自动生成一个唯一的ID。
3.3. 路由和分片
  • Elasticsearch使用路由来决定将文档存储到哪个分片(Shard)。路由通常是基于文档的ID来进行计算的,默认情况下,Elasticsearch会通过MD5哈希算法对文档ID进行处理,并将结果映射到分片。
  • 这个过程确保文档在集群中的分布是均衡的。
3.4. 文档分析(Analyzing)
  • 文档中的文本字段会经过分析过程。Elasticsearch使用**分析器(Analyzer)**来将文本字段分解成多个“词条”(terms)。这些词条会用于索引和查询。
    • 分析器由字符过滤器(Character Filter)、**分词器(Tokenizer)词项过滤器(Token Filter)**组成。
    • 例如,文本"Elasticsearch Basics"会被分解为两个词条:elasticsearchbasics
  • 分析器的选择通常是在创建索引时配置的,默认分析器通常是standard分析器。
3.5. 创建Lucene文档
  • 分析后的词条会被存储为Lucene文档的倒排索引(Inverted Index)的一部分。Lucene倒排索引将每个词条映射到包含该词条的文档ID列表中。
  • 这些词条在Elasticsearch中是可以搜索的关键元素。
3.6. 存储原始文档(_source字段)
  • 在索引文档时,Elasticsearch通常会将原始的JSON文档(即_source字段)存储起来。这样,当进行搜索时,用户可以检索到原始数据。
  • _source字段是文档的原始内容,不经过分析和转换,保留完整的原始结构。
3.7. 分配文档到分片
  • 文档经过路由后被分配到集群中的某个具体的分片(Shard)。分片的数量在创建索引时设置,并且每个分片可以被多个节点(Node)存储。
  • 每个文档的倒排索引会被存储在Lucene的分片索引中。
3.8. 更新和刷新
  • Elasticsearch的倒排索引是通过写入**事务日志(translog)**来进行更新的,事务日志确保了写操作的可靠性。在写入后,数据不会立即对外可见。
  • **刷新(refresh)**操作将事务日志的数据更新到倒排索引中,使得索引变得可搜索。
    • 刷新是定期进行的,但也可以通过_refreshAPI手动触发。
  • 每个分片会有一个独立的刷新周期,通常会在每个分片每隔一段时间进行一次刷新。
3.9. 成功索引
  • 当文档成功被索引后,Elasticsearch返回一个响应,告知用户索引成功。
  • 响应通常包含文档ID、索引名称、分片位置和版本号等信息。

      

{"_index": "my_index","_id": "1","_version": 1,"_shards": {"total": 1,"successful": 1,"failed": 0},"result": "created","_seq_no": 0,"_primary_term": 1
}
3.10. 数据的最终存储
  • 文档经过索引和刷新后,它的倒排索引和原始文档(_source)数据被持久化存储。
  • Elasticsearch会定期清理无用的文档和版本,通过合并(merge)过程来减少索引的碎片。

4. 索引的状态

  • 索引文档后的数据会进入搜索引擎的活跃状态。用户可以通过查询(search)请求来检索这些文档。
  • 如果在文档索引后有更新操作(如updatedelete),Elasticsearch会根据文档ID来执行这些操作,而这些操作最终会更新倒排索引。

总结

Elasticsearch索引文档的过程包括以下主要步骤:

  1. 接收索引请求。
  2. 确定目标索引和文档ID。
  3. 计算路由,将文档分配到对应的分片。
  4. 对文档中的文本字段进行分析,生成倒排索引。
  5. 存储原始文档(_source字段)。
  6. 执行更新和刷新操作,使文档可以被搜索。
  7. 最终,文档存储在索引的分片中,等待查询。

这些步骤结合了数据分片、路由、分析、索引和存储,确保Elasticsearch能够高效地存储和查询海量数据。

相关文章:

详细描述一下Elasticsearch索引文档的过程?

大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程?】面试题。希望对大家有帮助; 详细描述一下Elasticsearch索引文档的过程? Elasticsearch的索引文档过程是其核心功能之一,涉及将数据存储到…...

基于css的Grid布局和vue实现点击左移右移轮播过渡动画效果

直接上代码&#xff0c;以下代码基于vue2,需要Vue3或者react可以使用国内直连GPT/Claude来帮你转换下 代码如下&#xff1a; // ScrollCardsGrid.vue <template><div class"scroll-cards-container"><!-- 左箭头 --><div v-show"showLef…...

HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)习惯推荐方案概述

一、习惯推荐是HarmonyOS学习用户的行为习惯后做出的主动预测推荐。 1.开发者将用户在应用/元服务内的使用行为向HarmonyOS共享&#xff0c;使得HarmonyOS可以基于共享的数据学习用户的行为习惯。 2.在HarmonyOS学习到用户的行为习惯后&#xff0c;会给用户推荐相应功能&#x…...

【AtCoder】Beginner Contest 380-F.Exchange Game

题目链接 Problem Statement Takahashi and Aoki will play a game using cards with numbers written on them. Initially, Takahashi has N N N cards with numbers A 1 , … , A N A_1, \ldots, A_N A1​,…,AN​ in his hand, Aoki has M M M cards with numbers B …...

30. 并发编程

一、什么是多任务 如果一个操作系统上同时运行了多个程序&#xff0c;那么称这个操作系统就是 多任务的操作系统&#xff0c;例如&#xff1a;Windows、Mac、Android、IOS、Harmony 等。如果是一个程序&#xff0c;它可以同时执行多个事情&#xff0c;那么就称为 多任务的程序。…...

【包教包会】CocosCreator3.x框架——带翻页特效的场景切换

一、效果演示 二、如何获取 1、https://gitee.com/szrpf/TurnPage 2、解压&#xff0c;导入cocos creator&#xff08;版本3.8.2&#xff09;&#xff0c;可以直接运行Demo演示 三、算法思路 1、单场景 页面预制体 通过loadScene来切换页面&#xff0c;无法实现页面特效。…...

k8s上面的Redis集群链接不上master的解决办法

问题描述 之前在k8s上面部署了一台node&#xff0c;然后创建了6个redis的pod&#xff0c;构建了一个redis的集群&#xff0c;正常运行。 最近添加了一台slave node&#xff0c;然后把其中的几个redis的pod调度到了slave node上面&#xff0c;结果集群就起不来了&#xff0c;…...

<项目代码>YOLOv8 瞳孔识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

网络编程-002-UDP通信

1.UDP通信的简单介绍 1.1不需要通信握手,无需维持连接,网络带宽需求较小,而实时性要求高 1.2 包大小有限制,不发大于路径MTU的数据包 1.3容易丢包 1.4 可以实现一对多,多对多 2.客户端与服务端=发送端与接收端 代码框架 收数据方一般都是客户端/接收端 3.头文件 #i…...

MySQL更换瀚高语法更换

MySQL更换瀚高语法更换 一、前言二、语句 一、前言 水一篇,mysql更换瀚高之后&#xff0c;一些需要更换的语法介绍 > 二、语句 MySQL瀚高MySQL用法瀚高用法说明ifnull(x,y)coalesce(x,y)相同相同用于检查两个表达式并返回第一个非空表达式。如果第一个表达式不是 NULL&…...

Object.prototype.hasOwnProperty.call(item, key) 作用与用途

在 JavaScript 中&#xff0c;Object.prototype.hasOwnProperty.call(item, key) 是一种检查对象 item 是否具有特定属性 key 作为自身的属性&#xff08;而不是继承自原型链&#xff09;的方法。这种调用方式是安全的&#xff0c;特别是在处理可能被修改过原型链的对象时。 解…...

DNS的10种资源记录

前言 在DNS&#xff08;域名系统&#xff09;中&#xff0c;常见的资源记录&#xff08;Resource Records, RR&#xff09;用于存储域名与IP地址、邮件服务器等网络资源之间的映射关系。以下是几种常见的DNS资源记录&#xff1a; 1. A记录&#xff08;Address Record&#xf…...

【数据分享】1981-2024年我国逐日最低气温栅格数据(免费获取)

气象数据一直是一个价值很高的数据&#xff0c;它被广泛用于各个领域的研究当中。之前我们分享过来源于美国国家海洋和大气管理局&#xff08;NOAA&#xff09;下设的国家环境信息中心(NCEI)发布的1929-2024年全球站点的逐日最低气温数据&#xff08;可查看之前的文章获悉详情&…...

Kafka进阶_1.生产消息

文章目录 一、Controller选举二、生产消息2.1、创建待发送数据2.2、创建生产者对象&#xff0c;发送数据2.3、发送回调2.3.1、异步发送2.3.2、同步发送 2.4、拦截器2.5、序列化器2.6、分区器2.7、消息可靠性2.7.1、acks 02.7.2、acks 1(默认)2.7.3、acks -1或all 2.8、部分重…...

百度世界2024:智能体引领AI应用新纪元

在近日盛大举行的百度世界2024大会上&#xff0c;百度创始人李彦宏以一场题为“文心一言”的精彩演讲&#xff0c;再次将全球科技界的目光聚焦于人工智能&#xff08;AI&#xff09;的无限可能。作为一名科技自媒体&#xff0c;我深感这场演讲不仅是对百度AI技术实力的一次全面…...

NIST 发布后量子密码学转型战略草案

美国国家标准与技术研究所 (NIST) 发布了其初步战略草案&#xff0c;即内部报告 (IR) 8547&#xff0c;标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布&#xff0c;开放…...

同向双指针

长度最小的子数组 力扣209 #define MIN(a, b) ((b) < (a) ? (b) : (a)) int minSubArrayLen(int target, int* nums, int numsSize) {int ans numsSize 1;int left 0;int right 0;int sum 0;for (right 0; right < numsSize; right){sum nums[right];while (su…...

小鹏汽车大数据面试题及参考答案

抽象类与接口的区别是什么? 抽象类是一种不能被实例化的类,它可以包含抽象方法和非抽象方法。抽象方法是没有具体实现的方法,必须在子类中被实现。抽象类主要用于为一组相关的类提供一个通用的模板,子类可以继承抽象类并实现其中的抽象方法,也可以使用抽象类中的非抽象方法…...

华为再掀技术革新!超薄膜天线设计路由器首发!

随着Wi-Fi技术的不断进步&#xff0c;新一代的Wi-Fi 7路由器凭借其高速率、低延迟、更稳定的性能受到了广泛关注。它能够更好地满足现代家庭对网络性能的高要求&#xff0c;带来更加流畅、高效的网络体验。9月24日&#xff0c;华为在其秋季全场景新品发布会上推出了全新Wi-Fi 7…...

CREO TOOLKIT二次开发学习之字符转换

在tk中&#xff0c;有很多都是可以直接强制转换的&#xff0c;本文章只列举字符相关的转换。 不建议使用tk官方手册的函数进行转换&#xff0c;因此下文均以原生c进行举例。 //double转wstring wstring a; double b; ato_wstring(b);//wstring转double wstring wstr L"…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...