秋招Java后端开发冲刺——非关系型数据库篇(Elasticsearch)

Elasticsearch

本文对非关系型数据库Elasticsearch的基础知识及常见面试问题进行介绍。

(一)基础知识

1. Elasticsearch 是一个基于 Apache Lucene 的分布式、高扩展、高实时的搜索与数据分析引擎适用于各种数据类型,包括文本、数值、日期等。
2. 核心组件

  • Kibana:可视化工具,用于展示和分析数据
  • Logstash:数据收集和处理管道工具
  • Beats:轻量级数据采集器,用于将数据发送到 Elasticsearch

3. 特点

特点描述
全文搜索提供强大的全文搜索功能,包括复杂查询、排名和相关性评分。
分布式架构设计为分布式架构,可以通过增加节点来水平扩展集群。
实时索引和搜索允许近乎实时的索引和搜索,确保数据能够快速更新和检索。
多种数据类型支持支持结构化和非结构化数据,包括文本、数字、日期、地理位置等。
强大的分析能力通过聚合功能,对大数据集进行复杂的分析和统计。
高可用性通过分片和副本机制,提供数据的高可用性和故障恢复能力。
水平可扩展性可以通过添加节点来轻松扩展集群容量,支持处理大规模数据。
RESTful API提供基于 HTTP 的 RESTful API,方便与各种应用集成。
生态系统丰富与 Kibana、Logstash 和 Beats 等工具无缝集成,形成一个完整的数据解决方案。
自动分片和复制自动管理分片和副本分配,简化运维工作。
安全性提供细粒度的访问控制、安全通信和审计功能(通过 X-Pack 等插件)。
多语言支持支持多种语言的文本分析和搜索,包括中文、英文、法文等。

4.存储结构

  • JSON 文档:文档是 Elasticsearch 中的最小数据单元(类似于数据库中的行),以 JSON 格式存储。每个文档都有一个唯一的标识符(ID)和一个所属的索引
  • 倒排索引:是搜索引擎的核心数据结构,用于快速查找包含某个词项的所有文档。它由词典(Term Dictionary)和词项列表(Postings List)组成
    ① 词典:存储所有的词项
    ② 词项列表:包含每个词项在文档中的位置和频率信息
  • 存储字段(Stored Fields):存储每个文档的原始 JSON 数据
  • 文档值(Doc Values):存储数值型、日期型和地理位置等字段,优化这些字段的检索效率,用于排序和聚合操作的专用存储结构,独立于倒排索引

5. 集群
(1)一个 Elasticsearch 集群由一个或多个节点组成,这些节点共同工作以存储数据和提供搜索功能。集群有一个唯一的名字,通过这个名字可以识别和加入集群。
(2)组成

  • 主节点(Master Node):负责管理集群的元数据(例如索引和分片的分配)
  • 数据节点(Data Node):存储数据并处理搜索和聚合请求
  • 协调节点(Coordinating Node):处理客户端请求,分发到适当的数据节点,不存储数据
  • 专用节点:如专用主节点、专用数据节点、专用协调节点和专用机器学习节点

6.分片和副本
(1)分片是 Elasticsearch 中用于水平拆分索引数据的基本单位。每个分片本质上是一个独立的 Lucene 索引,可以存储在不同的节点上。
(2)分类

  • 主分片(Primary Shard):索引的主要分片,所有文档首先写入主分片
  • 副本分片(Replica Shard):主分片的复制品,用于提供故障恢复和负载均衡

(3)分片创建:在创建索引时,可以指定主分片和副本分片的数量。

在这里插入代码片PUT /my_index
{"settings": {"number_of_shards": 3,"number_of_replicas": 2}
}

:主分片的数量在创建索引后不能更改,而副本分片的数量可以在任何时候调整

(4)分片分配

  • Elasticsearch 会自动将分片分配到集群中的不同节点,以实现数据的均匀分布和高可用性
  • 在节点故障或新节点加入时,分片会被重新分配以保持集群的平衡

(5)分配策略

  • 轮询分配:分片轮流分配到不同节点,以均衡负载
  • 故障恢复:在节点故障时,主节点会将受影响的分片重新分配到其他节点
  • 数据重定位:在新节点加入时,主节点会重新分配分片以利用新节点的存储和计算资源
(二)常见问题

1. Elasticsearch的主要应用
(1)全文搜索
Elasticsearch 最常见的应用之一是全文搜索。它可以在大量文本数据中快速找到相关文档,支持复杂查询和排序。

  • 网站搜索:为网站提供内部搜索功能,用户可以通过关键词快速找到所需信息
  • 文档管理:在文档库中进行全文搜索,方便用户查找特定内容

(2)日志和事件数据分析
Elasticsearch 可以处理和分析大量日志和事件数据,帮助企业进行实时监控和故障排除。

  • 日志管理和分析:与 Logstash 和 Kibana 集成,构建 ELK(Elasticsearch, Logstash, Kibana)栈,用于收集、分析和可视化日志数据
  • 安全信息和事件管理(SIEM):用于实时监控和分析安全事件,快速检测和响应安全威胁

(3)应用程序性能监控(APM)
通过收集和分析应用程序的性能数据,Elasticsearch 帮助开发和运维团队监控应用程序性能,识别瓶颈并优化性能。

  • APM 解决方案:如 Elastic APM,提供端到端的性能监控和分析,包括请求追踪、错误报告和性能指标

(4)数据分析和可视化
Elasticsearch 强大的聚合功能使其成为大数据分析和可视化的理想工具。

  • 业务智能(BI):进行复杂的数据分析和统计,生成商业报告和洞察
  • 实时分析:实时处理和分析流数据,支持快速决策和响应

(5)电商搜索和推荐系统
Elasticsearch 被广泛应用于电子商务平台,提供强大的搜索和推荐功能,提升用户体验和转化率。

  • 产品搜索:快速响应用户查询,提供相关产品的搜索结果。
  • 个性化推荐:基于用户行为和历史数据,提供个性化的产品推荐。

(6)地理空间搜索
Elasticsearch 支持地理空间数据,可以进行地理位置相关的搜索和分析。

  • 地图和位置服务:在地图应用中查找附近的地点或设施
  • 地理围栏:基于地理位置触发特定事件或通知

(7)社交媒体分析
通过分析社交媒体数据,帮助企业了解用户行为和市场趋势。

  • 情感分析:分析用户对产品或服务的评论和反馈,了解用户情感倾向
  • 话题趋势分析:识别和分析热门话题,帮助制定营销策略

(8)金融数据分析
在金融行业,Elasticsearch 用于分析交易数据、市场数据和风险管理。

  • 交易监控:实时监控和分析交易数据,识别异常交易行为。
  • 市场趋势分析:分析市场数据,预测市场趋势和价格波动。

2. Elasticsearch 数据的备份与恢复
(1)Elasticsearch 提供了快照和恢复(Snapshot and Restore)功能,用于备份索引数据到一个远程存储库,并在需要时从这些快照中恢复数据。
(2)快照是某一时刻的
索引数据
完整副本
(3)恢复快照时,可以选择恢复全部索引或特定索引,并指定目标索引名称。
(4)快照管理

  • 定期备份:定期创建快照以确保数据的持续保护
  • 监控快照状态:使用 Elasticsearch 的监控工具或 API 监控快照创建和恢复的状态
  • 存储库管理:定期清理和管理快照存储库,删除不再需要的快照

3. Elasticsearch 的查询 DSL(Domain Specific Language)
(1)查询 DSL(Domain Specific Language)是一种功能强大的 JSON 风格的查询语言,允许用户构建复杂的搜索请求。
(2)基本结构

  • 查询上下文:用于计算文档的相关性评分,适用于全文搜索
  • 过滤器上下文:用于筛选文档,判断文档是否匹配条件,不计算相关性评分
    (3)查询类型
  • Match Query:用于全文搜索,查找与查询文本匹配的文档
  • Term Query:用于精确匹配,查找字段中包含确切值的文档
  • Range Query:用于查找字段值在指定范围内的文档
  • Bool Query:用于组合多个查询,包含 must(必须匹配)、should(应匹配)、must_not(必须不匹配)和 filter(过滤)子句
  • Phrase Match Query:用于查找包含确切短语的文档
  • Wildcard Query:用于查找与通配符模式匹配的文档
  • Term Filter:用于筛选字段中包含确切值的文档
  • Range Filter:用于筛选字段值在指定范围内的文档
  • Exists Filter:用于筛选字段存在的文档

4. 如何处理 Elasticsearch 中的慢查询

  • 慢查询日志:Elasticsearch 提供了慢查询日志,可以用来记录执行时间超过阈值的查询。其 Elasticsearch 可以分别为索引和搜索操作设置慢查询日志。
  • Profiling API:Elasticsearch 提供了 Profile API,可以详细分析查询的执行步骤和时间

5. Elasticsearch 优化查询

  • 避免使用复杂和嵌套查询:简化查询结构,减少不必要的嵌套查询
  • 使用过滤器:在 bool 查询中,使用 filter 而不是 must,因为过滤器不计算相关性评分,性能更高
  • 字段映射优化:为常用搜索字段设置合适的类型和分析器,避免非必要的全文搜索
  • 使用多字段(Multi-Fields):在一个字段上应用多种分析方式
  • 深分页(Deep Pagination):避免深度分页,因为它会导致大量数据传输。使用 search_after 或 scroll 进行深分页查询

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

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

相关文章

使用Jenkins进行持续集成与部署

在现代软件开发中,持续集成(CI)和持续部署(CD)是确保代码质量和加速交付流程的关键实践。Jenkins,作为一个开源的自动化服务器,提供了强大的工具来支持这些实践。本文将详细介绍如何使用Jenkins…

Windows 中的 Hosts 文件是什么?如何找到并修改它?

什么是 Hosts 文件 Hosts 文件是一个纯文本文件,存在于几乎所有的操作系统中,用于将主机名映射到 IP 地址。在域名系统(DNS)尚未普及之前,Hosts 文件是计算机网络中唯一用于主机名解析的方式。随着网络规模的扩大和 D…

show-overflow-tooltip 解决elementui el-table标签自动换行的问题

elementui中 el-table中某一行的高度不想因为宽度不够而撑开换行展示的解决方法。可通过show-overflow-tooltip属性解决&#xff0c;如下 代码是这样的 <el-table-column width"80" prop"id" label"ID"></el-table-column> <el…

wsl2收缩虚拟磁盘,减少空间占用

一、说明 由于WSL2使用的是虚拟磁盘&#xff0c;当虚拟磁盘的空间变大时&#xff0c;仅仅删除WSL2文件系统中没有用到的大文件&#xff0c;磁盘空间是无法自动收缩回收的。本文介绍了一种回收WSL2虚拟磁盘空间的方法。 二、停止WSL2 在收缩 WSL2 虚拟磁盘之前&#xff0c;需…

Linux服务器如何测试存储盘性能是否正常?FIO磁盘压测工具的使用详解

针对磁盘的压力性能测试工具有很多&#xff0c;简单的测试可以通过dd命令实现&#xff0c;而比较专业和强大的磁盘IO测试工具&#xff0c;当然首推FIO了。本文将和你们分享FIO工具安装和用法&#xff0c;希望可以帮助到你们~想要了解FIO工具首先你得知道顺序读写和随机读写这两…

编程开发不得不懂的世界协调时UTC的由来

在各种时间标准出现之前&#xff0c;各地都是根据太阳来进行计时的。把太阳连续2次经过地球同一位置所经历的时间间隔称为真太阳日&#xff0c;然后再把这个太阳日划分为更小的时间单位&#xff0c;例如中国古代使用日晷记录时间&#xff0c;把一个太阳日分为12个时辰。因为地球…

机器学习之元学习Reptile

元学习(Meta-learning)是一种机器学习方法,其目的是训练模型能够快速适应新任务。Reptile 是一种简单而有效的元学习算法,由 OpenAI 提出。它属于一种梯度下降方法,旨在通过多次微调模型参数来提高模型在新任务上的表现。 Reptile算法概述 Reptile 算法的核心思想是通过…

MySQL之可扩展性和高可用性(一)

可扩展性 负载均衡 一主多备间的负载均衡 最常见的复制拓扑结构就是一个主库加多个备库。我们很难绕开这个架构&#xff0c;许多应用都假设只有一个目标机器用于所有的写操作&#xff0c;或者所有的数据都可以从单个服务器上获得。尽管这个架构不太具有很好的可扩展性&#…

开启 k8s 命令补全功能

1. 查看 kubectl 帮助信息 [rootk8s231 /etc/kubernetes]# kubectl --helpSettings Commands:label Update the labels on a resourceannotate Update the annotations on a resourcecompletion Output shell completion code for the specified shell (bash,…

FFmpeg教程-三-播放pcm文件-1

目录 一&#xff0c;下载SDL 二&#xff0c;在Qt中测试 1&#xff0c;在pro文件中加入路径 2&#xff0c;在.cpp文件中加入头文件 3&#xff0c;进行测试 4&#xff0c;显示结果 一&#xff0c;下载SDL 通过编程的方式播放音视频&#xff0c;也是需要用到这2个库: FFmpeg…

CICD之Git版本管理及基本应用

CICD:持续集成,持续交付--让对应的资料,对应的项目流程更加规范--提高效率 CICD 有很多的工具 GIT就是其中之一 1.版本控制概念与环境搭建 GIT的概念: Git是一款分布式源代码管理工具(版本控制工具) ,一个协同的工具。 Git得其数据更像是一系列微型文件系统的快照。使用Git&am…

一年前 LLM AGI 碎片化思考与回顾系列⑧ · 穿越SystemⅡ未知之境

阅读提示&#xff1a; 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成&#xff0c;在内容上&#xff0c;与不久前刚刚完稿的那篇10万字文章 「融合RL与LLM思想&#xff0c;探寻世界模型…

智慧校园-教材管理系统总体概述

智慧校园教材管理系统&#xff0c;作为教育信息化进程的又一实践成果&#xff0c;正逐步改变着传统教材管理的模式。该系统通过集成先进的信息技术&#xff0c;对教材从采购、分配、使用到回收的全过程进行了全面的数字化改造&#xff0c;旨在构建一个高效、透明、节约的教材管…

nuxt 安装失败

在安装 Nuxt 项目时报错&#xff1a;ERROR Error: Failed to download template from registry: Failed to download 解决办法&#xff1a;在本地配 Host 在本地的 hosts 文件中新加一行配置&#xff0c;即可解决报错问题&#xff1a; 185.199.108.133 raw.githubusercontent…

一次可输入多张图像,还能多轮对话!最新开源数据集,让AI聊天更接近现实

大模型对话能更接近现实了&#xff01; 不仅可以最多输入20张图像&#xff0c;还能支持多达27轮对话。可处理文本图像tokens最多18k。 这就是最新开源的超长多图多轮对话理解数据集MMDU&#xff08;Multi-Turn Multi-Image Dialog Understanding&#xff09;。 大型视觉语言模…

【C++】构造函数和析构函数

目录 对象初始化-构造函数构造函数的分类构造函数的调用拷贝构造的应用构造函数调用规则深拷贝和浅拷贝初始化列表类对象作为类成员静态成员 对象释放-析构函数 对象初始化-构造函数 构造函数是类实例化的时候会自动调用的初始化函数&#xff0c;如果用户不写编译器会提供一个…

2025艺考时间线来啦!所有艺考生码住!

2025届艺考生们的征途即将启程。对于每一个即将参加艺考的考生和家长来说&#xff0c;梳理艺考时间节点是尤为重要的。 对于艺考生而言&#xff0c;更早的规划意味着更充分的准备时间&#xff0c;更扎实的专业能力。补齐艺考信息差&#xff0c;以下2025艺考时间线一定要看明白…

知识库在AI大模型中的使用流程

大模型知识库的使用流程通常包括以下关键步骤&#xff0c;大模型知识库的使用流程需要跨学科的知识和技能&#xff0c;包括自然语言处理、数据库管理、软件工程等。同时&#xff0c;也需要关注用户体验、性能优化、安全保护等方面&#xff0c;以提供高质量的知识服务。北京木奇…

逻辑回归梯度推导

逻辑回归是一种广泛使用的分类算法&#xff0c;用于估计一个事件发生的概率。它是线性回归的扩展&#xff0c;通过sigmoid函数将线性回归的输出映射到[0, 1]区间&#xff0c;从而用于分类任务。 在逻辑回归中&#xff0c;我们使用对数似然损失函数&#xff08;log-likelihood l…

CC7关于ConstantTransformer返回值不能和put一样的分析

CC7关于ConstantTransformer返回值不能和put一样的分析 前言 实验室的gaorenyusi也是学到cc7的时候问了我一个很好的问题&#xff0c;我当时学的时候没有在意&#xff0c;然后就去调试分析解决了一下 分析 首先是paylaod package CC7;import org.apache.commons.collectio…