Elasticsearch框架学习的难点和重点有哪些

Elasticsearch是一个基于Lucene构建的开源搜索引擎,广泛用于全文检索、日志数据分析等多种应用场景。由于其强大的搜索能力、灵活的扩展性和丰富的功能特性,Elasticsearch在数据分析和搜索领域非常受欢迎。V哥认为学习Elasticsearch主要包括以下几个难点和重点,兄弟们坐稳V哥要发车了。

1. 难点和重点

  1. 基本概念:
  • 节点和集群:理解Elasticsearch中的节点(Node)和集群(Cluster)的概念,以及它们如何协同工作。
  • 索引(Index):索引是Elasticsearch中的核心概念,与关系型数据库中的数据库相似,但有其特殊性。
  • 类型(Type)和文档(Document):在Elasticsearch 7.x之后,一个索引中只允许有一个类型,到Elasticsearch 8.x之后类型已经被移除,但了解其历史概念对理解Elasticsearch的发展有帮助。
  • 分片(Shard)和副本(Replica):理解分片和副本的概念对于掌握Elasticsearch的数据分布和容错机制至关重要。
  1. 数据索引:
  • 文档映射(Mapping):学习如何定义文档的字段类型、分析器等属性。
  • 索引管理:包括创建索引、更新映射、删除索引等操作。
  1. 搜索技术:
  • 查询DSL:Elasticsearch提供了一种丰富的查询DSL(Domain Specific Language),用于执行复杂的搜索操作。
  • 聚合(Aggregations):聚合提供了从数据中提取洞察力的能力,类似于SQL中的GROUP BY操作。
  1. 性能优化:
  • 分片策略:学习如何根据数据量和查询模式来合理分配分片。
  • 缓存和刷新:理解Elasticsearch中的各种缓存机制以及如何通过合理配置提高搜索性能。
  1. 集群管理:
  • 监控和诊断:学习如何监控Elasticsearch集群的健康状况和性能指标。
  • 扩展和故障转移:了解如何在不中断服务的情况下扩展集群和处理节点故障。

2. 核心内容重点解释

  • 倒排索引:Elasticsearch使用倒排索引来快速进行全文搜索。倒排索引是一种将文档的内容和对应文档ID的映射关系存储起来的数据结构,使得搜索时能够快速找到包含特定词汇的所有文档。

  • 分词器(Analyzer):分词器用于处理文本,将其转换为适合搜索的倒排索引项。Elasticsearch内置了许多分词器,也可以自定义分词器以适应不同的语言和文本类型。

  • 集群和节点:Elasticsearch的集群由多个节点组成,节点可以通过网络互相通信,共同存储整个数据集,并提供跨节点的联合查询能力。集群的健康状态监控和节点管理是维护Elasticsearch稳定运行的关键。

  • 路由(Routing):路由机制决定了文档存储在哪个分片上,以及查询时如何快速定位到正确的分片。

  • 弹性伸缩:Elasticsearch支持横向扩展,可以通过增加节点来提高集群的处理能力和存储容量。学习如何在不影响服务的前提下进行扩容是运维Elasticsearch的重要技能。

学习Elasticsearch不仅要理解上述概念和操作,还需要通过实践来掌握。建议在学习过程中,结合实际项目需求,不断尝试和优化,以达到熟练应用的水平。同时,关注官方文档和社区动态,以了解最新的特性和最佳实践。

3. Elasticsearch分片策略的示例

Elasticsearch分片策略是指如何将数据分散存储到多个分片中,以及如何管理这些分片以提高性能和可用性的过程。以下是一个关于Elasticsearch分片策略的示例,来一起看一下。

示例:博客文章索引的分片策略

假设我们正在为一个博客平台构建搜索功能, V哥决定使用Elasticsearch来索引博客文章。考虑到博客文章的数量可能会随着时间的推移而增长,我们需要为索引选择合适的分片策略。

  1. 预测数据量和增长

首先,我们需要预测未来一段时间内博客文章的数据量。假设我们预计在一年内会有大约100万篇博客文章。

  1. 选择初始分片数

Elasticsearch建议每个分片的大小在20GB到40GB之间。如果我们预计每篇博客文章平均大小为1KB,那么100万篇文章大约需要1TB的存储空间。如果我们希望每个分片的大小保持在20GB左右,那么我们至少需要40个分片(1TB / 25GB)。

  1. 考虑写入和查询模式

博客文章的写入模式通常是顺序写入,而查询模式可能是随机的。为了优化写入性能,我们可以选择更多的分片,以便并行写入。然而,过多的分片会增加查询时的开销,因为查询可能需要跨多个分片执行。

  1. 决定分片和副本数量

基于以上考虑,我们决定为博客文章索引创建40个主分片。我们还希望有高可用性和故障转移能力,因此我们决定为每个主分片创建1个副本分片,总共80个分片(40主分片 + 40副本分片)。

  1. 配置索引

在创建索引时,我们使用以下配置:

PUT /blogs
{"settings": {"number_of_shards": 40,"number_of_replicas": 1},"mappings": {"properties": {"title": {"type": "text"},"content": {"type": "text"},"author": {"type": "keyword"},"publish_date": {"type": "date"}}}
}

解释:

  • number_of_shards:这是设置主分片数量的参数。我们将其设置为40,以适应预计的数据量,并优化写入性能。

  • number_of_replicas:这是设置副本分片数量的参数。我们将其设置为1,以确保每个主分片有一个副本,提供高可用性和故障转移能力。

  • mappings:这是定义文档字段的映射的部分。我们定义了标题、内容、作者和发布日期字段,以及它们的类型。

通过这个示例,我们可以看到分片策略的决策过程涉及到对数据量、写入和查询模式、以及可用性要求的综合考虑。选择合适的分片策略对于确保Elasticsearch集群的性能和稳定性至关重要。在实际应用中,可能还需要根据实际情况进行调整和优化。

4. Elasticsearch中使用缓存机制提高搜索性能

Elasticsearch提供了多种缓存机制来提高搜索性能,包括节点查询缓存(Node Query Cache)、请求缓存(Request Cache)、字段数据缓存(Field Data Cache)和索引缓存(Index Cache)。以下是V哥整理的一个示例,展示如何通过合理配置这些缓存来提高搜索性能。

示例:配置Elasticsearch缓存

假设我们正在运行一个Elasticsearch集群,用于存储和分析日志数据。我们注意到某些搜索查询运行得比较慢,我们希望通过配置缓存来提高性能。

  1. 节点查询缓存(Node Query Cache)

节点查询缓存用于缓存过滤器上下文中使用的数据。为了充分利用这个缓存,我们应该确保尽可能多的查询使用过滤器上下文。

PUT /your_index/_settings
{"index.query.default_field": ["field1", "field2"],"index.query.parse.allow_expensive_queries": false
}
  • index.query.default_field:设置默认字段,以便在查询中没有指定字段时使用。
  • index.query.parse.allow_expensive_queries:禁止执行昂贵的查询,鼓励使用过滤器上下文。
  1. 请求缓存(Request Cache)

请求缓存用于缓存聚合请求的结果。如果您的搜索请求包含聚合,并且这些请求的结果不经常变化,那么启用请求缓存会很有帮助。

PUT /your_index/_settings
{"index.requests.cache.enable": true
}
  • index.requests.cache.enable:启用请求缓存。
  1. 字段数据缓存(Field Data Cache)

字段数据缓存用于缓存聚合和排序操作中使用的数据。为了优化字段数据缓存的使用,我们应该避免对大型文本字段进行聚合或排序,并尽量使用关键字字段。

PUT /your_index/_settings
{"index.fielddata.cache.expire": "5m"
}
  • index.fielddata.cache.expire:设置字段数据缓存的过期时间,以避免过时的数据占用太多内存。
  1. 索引缓存(Index Cache)

索引缓存包括查询缓存和过滤缓存,用于缓存查询和过滤器的结果。为了优化索引缓存的使用,我们应该尽量使用过滤器上下文,并避免使用复杂的查询。

PUT /your_index/_settings
{"index.query.cache.enabled": true,"index.filter.cache.enabled": true
}
  • index.query.cache.enabled:启用查询缓存。
  • index.filter.cache.enabled:启用过滤缓存。

解释:

  • 节点查询缓存:通过设置合理的默认字段和禁止昂贵的查询,我们鼓励使用过滤器上下文,从而充分利用节点查询缓存。
  • 请求缓存:对于不经常变化的聚合请求,启用请求缓存可以显著提高性能。
  • 字段数据缓存:通过避免对大型文本字段进行聚合或排序,并使用关键字字段,我们可以减少字段数据缓存的压力。同时,设置合理的过期时间可以帮助释放内存。
  • 索引缓存:启用查询缓存和过滤缓存可以提高缓存的利用率,从而提高搜索性能。

通过这个示例,我们可以看到如何通过合理配置Elasticsearch中的缓存机制来提高搜索性能。在实际应用中,可能还需要根据具体的工作负载和性能要求进行调整和优化。

5. Elasticsearch倒排索引

Elasticsearch使用倒排索引来快速进行全文搜索。倒排索引是一种将文档的内容和对应文档ID的映射关系存储起来的数据结构,使得搜索时能够快速找到包含特定词汇的所有文档。以下是一个关于Elasticsearch倒排索引的示例,并对其进行解释。

示例:博客文章索引的倒排索引

假设我们正在为一个博客平台构建搜索功能,我们决定使用Elasticsearch来索引博客文章。我们有一个博客文章的索引,其中包含多个文档,每个文档代表一篇博客文章。

  1. 创建索引和添加文档

首先,我们创建一个名为"blogs"的索引,并添加一些文档。

PUT /blogs
{"settings": {"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"properties": {"title": {"type": "text"},"content": {"type": "text"},"author": {"type": "keyword"},"publish_date": {"type": "date"}}}
}POST /blogs/_doc
{"title": "Elasticsearch简介","content": "Elasticsearch是一个基于Lucene构建的开源搜索引擎。","author": "V哥","publish_date": "2021-01-01"
}POST /blogs/_doc
{"title": "Elasticsearch集群管理","content": "了解Elasticsearch集群的管理和优化。","author": "V少","publish_date": "2021-02-01"
}POST /blogs/_doc
{"title": "Elasticsearch搜索技术","content": "掌握Elasticsearch的搜索技术和查询DSL。","author": "V嫂","publish_date": "2021-03-01"
}
  1. 倒排索引的构建

当文档被添加到索引中时,Elasticsearch会自动构建倒排索引。倒排索引由多个词典(Term Dictionary)组成,每个词典映射到一个或多个文档。

例如,对于"title"字段,Elasticsearch会为每个唯一的词构建一个词典条目,并记录包含该词的文档ID。

  1. 使用倒排索引进行搜索

现在,我们可以使用倒排索引进行搜索。例如,我们想要搜索标题中包含"Elasticsearch"的博客文章。

GET /blogs/_search
{"query": {"term": {"title": "Elasticsearch"}}
}

解释:

  • 创建索引和添加文档:我们首先创建一个名为"blogs"的索引,并定义了文档的映射。然后,我们添加了三个文档,每个文档包含标题、内容、作者和发布日期字段。

  • 倒排索引的构建:当文档被添加到索引中时,Elasticsearch会自动构建倒排索引。倒排索引由多个词典组成,每个词典映射到一个或多个文档。在这个示例中,Elasticsearch会为"title"字段中的每个唯一词构建一个词典条目,并记录包含该词的文档ID。

  • 使用倒排索引进行搜索:当我们执行搜索查询时,Elasticsearch会使用倒排索引来快速找到包含特定词汇的所有文档。在这个示例中,我们搜索标题中包含"Elasticsearch"的博客文章,Elasticsearch会查找"title"字段的词典,找到"Elasticsearch"条目,并返回包含该词的文档ID。

通过这个示例,我们可以看到Elasticsearch如何使用倒排索引来快速进行全文搜索。倒排索引是Elasticsearch能够提供高效搜索能力的关键所在。在实际应用中,Elasticsearch会自动处理倒排索引的构建和更新,我们只需要关注如何定义索引和执行搜索查询即可。

6. 最后

V 哥最后再啰嗦一下,学习Elasticsearch主要包括基本概念、数据索引、搜索技术、性能优化和集群管理等方面的内容。倒排索引是一种将文档的内容和对应文档ID的映射关系存储起来的数据结构,使得搜索时能够快速找到包含特定词汇的所有文档。倒排索引是Elasticsearch能够提供高效搜索能力的关键所在。在实际应用中,我们需要根据具体的工作负载和性能要求来选择合适的分片策略、配置缓存机制和执行搜索查询。学习Elasticsearch需要结合实际项目需求,通过实践来不断尝试和优化。同时,关注官方文档和社区动态,以了解最新的特性和最佳实践。

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

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

相关文章

极度内卷,消费下行,AIGC如何成为普通人易变现好上手的新机会,这几种方法一定要尝试!

最近看到一个麦肯锡报告,说到2030年,AI会替代1亿多中国人的岗位。 暂且不说这个预测是否准确,但自从AI横空出世,确实给我们的生活带来了翻天覆地的变化,有人顺势起飞,有人被时代淘汰… 李开复也曾不止一次…

47-Qt控件详解:Buttons Containers1

一 QPushButton (命令按钮) #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPushButton>//引入QPushButton类对应的头文件class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWind…

如何评估大型语言模型(LLM)?

01 简介 Introduction 随着ChatGPT和其他大型语言模型&#xff08;LLMs&#xff09;的发布&#xff0c;可用模型数量大量增加&#xff0c;现在几乎每天都有新的LLMs发布。尽管如此&#xff0c;当下仍然没有一个通用的标准来评估这些大型语言模型的质量。本文将回顾现有的大型语…

振弦式表面式应变计有哪些功能优势

振弦式表面应变计是一种高精度的测量工具&#xff0c;专门用于测量材料表面的应变和位移。它通过监测材料表面的微小变化&#xff0c;帮助工程师获得关键的结构性能数据。振弦式表面应变计因其独特的功能优势&#xff0c;在众多领域尤其是在结构健康监测中&#xff0c;发挥着不…

卡尔曼滤波状态估计

clear all; close all; clc; %% 上面是调用卡尔曼滤波 % 定义状态维数和初始条件 n 3; % 状态维数 q 0.2; % 过程噪声标准差 r 0.15; % 测量噪声标准差 Q q * eye(n); …

vite配置别名@时遇到错误【Dynamic require of “path“ is not supported 】

遇到的问题 vite项目中配置别名的时候&#xff0c;使用 const path require("path") 的形式引入path的时候提示错误&#xff1a; failed to load config from C:\Users\Administrator\Desktop\zss\note\demo\demo\vite.config.js 10:30:31 [vite] Dynamic require…

Oracle如何收缩减小表空间大小

比如我们发现一个表空间占用比较大&#xff0c;但是空闲空间很大&#xff0c;想要减小表空间占用大小。查看表空间的情况 发现BETEST表空间占用大&#xff0c;但是剩余大小比较大&#xff0c;可以减小存储占用。 如果我们想减小到100MB&#xff0c;那么就登录其用户执行&#…

UDP怎么端口映射?

在网络通信中&#xff0c;TCP和UDP是两种常用的传输协议。UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输协议&#xff0c;相较于TCP协议来说&#xff0c;它更为轻量级且不可靠。UDP协议在某些场景下仍然有其独特的优势&#xff0c;尤其是在需要快速传输…

足球知识付费系统下载,教育后半场,创业公司如何突围?

伴随着资本寒冬&#xff0c;企业用人成本高企&#xff0c;市场竞争环境半垄断半割据&#xff0c;“找人、找钱、找方向”对于初创企业来说无疑都难上加难。 在这种环境下&#xff0c;北极光创投创始人、董事总经理邓锋说&#xff1a;虽然面临诸多挑战&#xff0c;但相信新的机会…

每天一个数据分析题(三百一十二)-业务分析模型

理解业务分析模型能够更好的把握业务全局&#xff0c;以下可以用来对产品分类的模型是&#xff1f; A. RFM模型 B. 用户贡献价值模型 C. 波士顿矩阵 D. 销售漏斗模型 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案

高端手机格局再生变数,华为赋魅、苹果祛魅

历经二十多年发展&#xff0c;智能手机产业链高度成熟&#xff0c;消费者换机需求疲软&#xff0c;智能手机厂商艰难创新&#xff0c;市场存量竞争早已进入白热化阶段。 在消费侧&#xff0c;消费者换机周期不断延长&#xff0c;智能手机赛道进入增长疲软期。研究机构TechInsi…

JavaScript 工具函数(分享)

文章目录 1. 任意区间的的随机数2. 判断一个数是不是质数3. 传入指定 key 返回当前页面 search 的 value&#xff0c;也可以手动传入url4. 在 Date 上封装了一个返回指定格式的方法5. 数组去重6. 预览pdf&#xff0c;后端返回的文件流设置的只能下载&#xff0c;需要预览7. 下载…

速盾:jquery是用cdn快,还是保存本地快?

在讨论jQuery是使用CDN快还是保存本地快之前&#xff0c;我们先来了解一下jQuery是什么。 jQuery是一种流行的JavaScript库&#xff0c;它极大地简化了JavaScript编程&#xff0c;使得开发者能够更轻松地操作HTML文档、处理事件、实现动画效果以及处理AJAX请求。由于其简单易用…

Spring:Spring Boot常用注解大全

Spring Boot是一个由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。以下是对Spring Boot的详细介绍&#xff1a; 一、发展沿革   2013年&#xff0c;Pivotal团队开始研发Spring Boot。   2014年4月&#xff0c;发布了全…

各渠道应用推广点击上报文档地址

小米点击上报&#xff1a;https://api.e.mi.com/doc.html#/1.0.0-mdtag9b26f-omd/document-2bd1c4c260259b072818205a8ae20139 荣耀点击上报&#xff1a;https://ads.honor.com/help/1738095811504373761

python print用

Python中的print()函数是最常用的一个内置函数&#xff0c;用来向标准输出设备&#xff08;通常是屏幕&#xff09;发送文本或其他类型的对象。从Python初学者到高级开发人员&#xff0c;print()函数是编写程序时不可或缺的一个工具。本文旨在深入探讨print()函数的不同用法和技…

[每周一更]-(第96期):Rsync 用法教程:高效同步文件与目录

文章目录 一、引言二、rsync 基本概念三、介绍rsync 是什么&#xff1f;四、安装五、rsync 基本语法常见示例&#xff08;默认ssh协议&#xff09;&#xff1a; 六、常用选项1. -a 或 --archive2. -v 或 --verbose3. -z 或 --compress4. --delete5. --exclude6. --exclude-from…

vue项目中vue.config.js中配置webpack详解

前言&#xff1a; vue-cli3以前的版本中把webpack的配置都写在config文件中&#xff0c;可以vue-cli3以上的版本中没有了config目录&#xff0c;可以将配置webpack的文件写在vue.config.js文件里面。 vue.config.js 是一个可选的配置文件&#xff0c;如果项目的 (和 package.…

hadoop yarm你知道吗?

一、概念 Hadoop YARN&#xff08;Yet Another Resource Negotiator&#xff09;是Hadoop 2.x版本中的一个重要组件&#xff0c;用于资源管理和作业调度。它是Hadoop的第二代资源管理器&#xff0c;取代了Hadoop 1.x版本中的MapReduce作业调度器。 通俗地理解它的作用有点像一…

如何通过外网访问内网服务器?

随着网络的普及和各行各业对互联网的应用需求增加&#xff0c;通过外网访问内网服务器的需求也越来越多。在传统的网络环境下&#xff0c;要实现外网访问内网服务器需要进行繁琐的端口映射设置&#xff0c;而且还会受到网络环境限制和数据安全问题的困扰。现在有了一种名为【天…