ElasticSearch知识点
什么是ElasticSearch
ElasticSearch: 智能搜索,分布式的搜索引擎,是ELK的一个非常完善的产品,ELK代表的是: E就是ElasticSearch,L就是Logstach,K就是kibana
Elasticsearch是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。
ElasticSearch的应用场景
1)全文搜索的功能
Elasticsearch提供了全文搜索的功能,适用于电商商品搜索、App搜索、企业内部信息搜索、IT系统搜索等
2)日志分析
复杂的业务场景通常会产生繁杂多样的日志,如Apache Log、System Log、MySQL Log等,往往很难从繁杂的日志中获取价值,却要承担其存储的成本。
Elasticsearch能够借助Beats、Logstash等快速对接各种常见的数据源,并通过集成的Kibana高效地完成日志的可视化分析,让日志产生价值。
3) 运维监控
当您在ECS或者物理机中部署了Docker容器.、MySQL或MongoDB等数据库,可使用Elasticsearch结合Beats、Logstash或ElasticFlow将所有日志实时集中并构建索引,然后通过集成的Kibana灵活地运用数据构建可视化运维看板,并在看板上展示丰机名称、IP地址、部署情况、显示颜色等信息
4)全分析
当您需要通过日志解决公司内部繁杂的安全审计工作,可通过Elasticsearch分析、检索海量历史日志,高效地完成安全审计工作。
ElasticSearch的优缺点
1)分布式的实时文件存储,每个字段都被索引且可用于搜索
2)分布式的实时分析搜索引警,海量数据下近实时秒级响应
3)简单的restful api,天生的兼容多语言开发
4)易扩展,处理PB级结构化或非结构化数据
ElasticSearch中的倒排索引是什么
倒排索引是搜索引擎的核心,搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索
倒排索引是一种像数据结构一样的散列图,可将用户从单词导向文档或网页,它是搜索引擎的核心,其主要目标是快速搜索从数百万文件中查找数据。
倒排索引是区别于正排索引的概念:
正排索引: 是以文档对象的唯一ID 作为索引,以文档内容作为记录
倒排索引: Inverted index,指的是将文档内容中的单词作为索引,将包含该词的多个文档ID 作为记录
Elasticsearch 索引文档的过程
面试官想考察你的是: 文档写入 ES创建索引的过程
文档写入包含: 单文档写入和批量bulk写入,这里只解释一下单文档写入流程大致分为如下三步:
第一步:客户从集群某节点写入数据,发送请求
第二步:节点1 接受到请求后,使用文档 id 来确定文档属于分片0。而分片0属于节点3,请求会被转到节点 3。分片0的主分片也分配到节点 3 上;
第三步,节点3 在主分片上执行写操作,成功后将情求并行转发到节点1和节点 2 的副本分片上,所有的副本分片都报告功节点3将向协调节点(节点 1) 报告成功,节点 1 请求客户端报告写入成功。
Elasticsearch 的基本概念?
(1)index 索引:索引类似于mysal中的数据库,Elasticesearch 中的索引是存在数据的地方,包含了一堆有相似结构的文档数据。
(2) type 类型:类型是用来定义数据结构,可以认为是 mysql 中的一张表,type 是index 中的一个逻数据分类
(3) document 文档:类似于 MySQL 中的一行,不同之处在于 ES 中的每个文档可以有不同的字段,但是对于通用字段应该具有相同的数据类型,文档是es中的最小数据单元,可以认为一个文档就是一条记录。
(4) Field 字段: Field是Elasticsearch的最小单位,一个document里面有多个field
(5)shard 分片:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞叶量和性能。
(6) replica 副本:任一个服务器随时可能故障或宕机,此时shard 可能会丢失,因此可以为每个 shard 创建多个 replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞叶量和性能。primaryshard (建立索引时一次设置,不能修改,默认5个),replica shard (随时修改数量,默认1个),默认每个索引10个 shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器
ElasticSearch的搜索流程?
搜索被执行成一个两阶段过程:
第一个阶段: Query阶段
客户端发送请求到协调节点(coordinate node),协调节点将搜索请求广播到所有的 primary shard或replica,每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。接着每个分片返回各自优先队列中 所有 docId 和 打分值 给协调节点.由协调节点进行数据的合并、排序、分页等操作,产出最终结果。
第二个阶段: Fetch阶段
协调节点根据 Query阶段产生的结果,去各个节点上查询 docld 实际的 document 内容,最后由协调节点返回结果给客户端
ElasticSearch的集群、节点、索引、文档是什么?
1)集群是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能.
2)节点
节点是属于集群一部分的单个服务器,它存储数据并参与群集索引和搜索功能.
3)索引就像关系数据库中的“数据库”,它有一个定义多种类型的映射索引是逻辑名称空间,映射到一个或多个主分片,并且可以有一个或多个副本分片
4)文档类似于关系数据库中的一行,不同之处在于索引中的每个文档可以具有不同的结构(字段),但是对于通用字段应该具有相同的数据类型
Elasticsearch 支持哪些类型的查询?
查询主要分为两种类型:精确匹配、全文检索匹配
精确匹配,例如 term、exists、 term set、 range、 prefix、 ids、 wildcard、 regexp. fuzzy等:全文检索,例match、 match phrase、 multi match、 match phrase prefix、 query string等
Elasticsearch 中执行搜索的各种可能方式有哪些?
方式一: 基于 DSL检索(最常用) Elasticsearch提供基于JSON的完整查询DSL来定义查询。
GET /shirts/_search
{"query":{"bool":{"filter":{{"term":{"color":"red"}},{"term":{"brand":"gucci"}}}}}
}
方式二: 基于 URL检索
GET /my_index/_search?q-user: seina
方式三: 类SQL检索
POST /_sql?format=txt
{"query": "SELECT * FROM uint-2020-08-17 ORDER BY itemid DESC LIMIT 5"
}
ElasticSearch如何实现 master 选举的?
对所有可以成为 Master 的节点(node,master: true) 根据 nodeld 排序,每次选举每个节点都把自己所知道的节点排一次序,然后选出第一个(第0位)节点,暂时认为它是 Master 节点。
如果对某个节点的投票数达到一定的值(可以成为master节点数/2+1) 并且该节点自己也选举自己,那这个节点就是master.否则重新选举。(当然也可以自己设定一个值,最小值设定为超过能成为Master节点的n/2+1,否则会出现脑裂问题.discoveryzen,minimum master nodes)
Elasticsearch 更新和删除文档的过程?
删除和更新也都是写操作,但是Elasticsearch中的文档是不可变的,因此不能被删除或者改动以展示其变更:
磁盘上的每个段都有一个相应的.del文件,当删除请求发送后,文档并没有真的被删除,而是 在.del文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过演掉,当段合并时,在.del文件中被标记为删除的文档将不会被写入新段
在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段,旧版本的文档依然能匹配 查询,但是会在结果中被过演掉
Elasticsearch高并发下如何保证读写一致性?
1)对于更新操作
可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖
每个文档都有一个 version 版本号,这个版本号在文档被改变时加一。Elasticsearch使用这个 versin 保证所有修改都被正确排序。当一个旧版本出现在新版本之后,它会被简单的忽略。
利用 version的这一优点确保数据不会因为修改冲突而丢失。比如指定文档的version来做更改,如果那个版本号不是现在的,我们的请求就失败了
2)对于写操作
一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。
3)对于读操作
可以设置replication 为 sync(默认,这使得操作在主分片和副本分片都完成后才会返回; 如果设置replication 为 async 时,也可以通过设置搜索请求参数 preference 为 primary 来查询主分片,确保文档是最新版本
ElasticSearch索引多了怎么办,如何调优部署?
1)在设计的时候可以基于模板+时间滚动方式创建索引,每天递增数据,避免单个索引很大的情况出现:
2)在存储的时候冷热教据分开存储比如最近3天的数据作为热数据,其他的作为冷数据。冷数据的话由于不会再写入新数据了,可以考虑定期force merge (强制合并)和shrink (压缩)的方式进行处理,节约空间和检索效率
3)由于es支持动态扩展,所有可以多加几台机器来缓解集群压力
相关文章:

ElasticSearch知识点
什么是ElasticSearch ElasticSearch: 智能搜索,分布式的搜索引擎,是ELK的一个非常完善的产品,ELK代表的是: E就是ElasticSearch,L就是Logstach,K就是kibana Elasticsearch是一个建立在全文搜索引擎 Apache Lucene基础…...

STM32 GPIO
STM32 GPIO GPIO简介 GPIO(General Purpose Input Output)通用输入输出口,也就是我们俗称的IO口 根据使用场景,可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 数据0就是低电平,…...
Electron 开发页面应用
简介 Electron集成了包括chromium(理解为具备chrom浏览器的工具),nodejs,native apis chromium:支持最新特性的浏览器。 nodejs:js运行时,可实现文件读写等。 native apis :提供…...
CSDN写博文的128天
起因 为什么要写博文? 写博文是因为当我还是编程小白时,我那会啥也不懂,不懂函数调用,不懂指针,更不懂结构体,别更说Linux,平时不会也没有可以问的人,也幸好有CSDN,遇到…...

Linux学习教程(第二章 Linux系统安装)1
第二章 Linux系统安装 学习 Linux,首先要学会搭建 Linux 系统环境,也就是学会在你的电脑上安装 Linux 系统。 很多初学者对 Linux 望而生畏,多数是因为对 Linux 系统安装的恐惧,害怕破坏电脑本身的系统,害怕硬盘数据…...
vue2手机项目如何使用蓝牙功能
要在Vue2手机项目中使用蓝牙功能,你需要先了解基本的蓝牙知识和API。以下是一些基本的步骤: 确认你的手机设备支持蓝牙功能。在Vue2项目中安装蓝牙插件或库,例如vue-bluetooth或vue-bluetooth-manager。你可以通过npm安装它们。在Vue2项目中…...
魔兽服务器学习-笔记1
文章目录 一、环境准备1)依赖安装2)源码下载和编译 二、生成数据信息1)地图数据信息(客户端信息)2)数据库信息 三、启动服务器四、日志模块五、数据库模块六、场景模块1)地图管理2)A…...
代码随想录day60|84.柱状图中最大的矩形
84.柱状图中最大的矩形(找到右边第一个更小的元素) 1、对于每一个柱子:找到左边第一个比他矮的,再找到右边第一个比他矮的。 2、首尾加0: 为什么要在末尾加0:否则如果原数组就是单调递增的话,就…...

常见面试题-分布式锁
Redisson 分布式锁?在项目中哪里使用?多久会进行释放?如何加强一个分布式锁? 答: 什么时候需要使用分布式锁呢? 在分布式的场景下,使用 Java 的单机锁并不可以保证多个应用的同时操作共享资源…...
vue开发 安装一些工具
下载 node.js环境 nodeJs 官网 命令行输入 node -v 和 npm -v 出现版本号 代表nodejs 安装成功选择安装pnpm npm install -g pnpmpnpm -v 出现版本号即成功安装安装 scss vue3 组件库 Element Plus Element 官网 安装 pnpm install Element-Plus --save第一次使用开发v…...
Vue.js 组件 - 自定义事件
Vue.js 组件 - 自定义事件 父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,就需要使用自定义事件! 我们可以使用 v-on 绑定自定义事件, 每个 Vue 实例都实现了事件接口(Events interface),即: …...

深度学习 python opencv 火焰检测识别 计算机竞赛
文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…...

PHP中传值与引用的区别
在PHP中,变量的传递方式主要分为传值和传引用两种。这两种方式在操作中有一些重要的区别,影响着变量在函数调用或赋值操作中的表现。下面详细解释一下这两种传递方式的区别。 传值(By Value) 传值是指将变量的值复制一份传递给函…...

Go常见数据结构的实现原理——map
(一)基础操作 版本:Go SDK 1.20.6 1、初始化 map分别支持字面量初始化和内置函数make()初始化。 字面量初始化: m : map[string] int {"apple": 2,"banana": 3,}使用内置函数make()初始化: m …...

第二十五节——Vuex--历史遗留
文档地址 Vuex 是什么? | Vuex version V4.x 一、概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。一个状态自管理应用包含以下几个部…...

大数据Doris(二十一):数据导入演示
文章目录 数据导入演示 一、启动zookeeper集群(三台节点都启动) 二、启动hdfs集群...

[100天算法】-面试题 04.01.节点间通路(day 72)
题目描述 节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n 3, graph [[0, 1], [0, 2], [1, 2], [1, 2]], start 0, target 2 输出:true 示例2:输入:n 5, graph [[0, 1], …...

linux_day02
1、链接:LN 一个点表示当前工作目录,两个点表示上一层工作目录; 目录的本质:文件(该文件储存目录项,以链表的形式链接,每个结点都是目录项,创建文件相当于把目录项添加到链表中&…...

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点
OpenCV-Python小应用(九):通过灰度直方图检测图像异常点 前言前提条件相关介绍实验环境通过灰度直方图检测图像异常点代码实现输出结果 参考 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容ÿ…...

关于el-table+el-input+el-propover的封装
一、先放图片便于理解 需求: 1、el-input触发focus事件,弹出el-table(当然也可以为其添加搜索功能、分页) 2、el-table中的复选共能转化成单选共能 3、选择或取消的数据在el-input中动态显示 4、勾选数据后,因为分页过多,原先选好…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...