【DevOps】怎么提升Elasticsearch 的搜索性能
一、怎么提升Elasticsearch 搜索性能
提升 Elasticsearch (ES) 的搜索性能可以从多个角度进行优化,包括硬件选择、配置调整、查询优化等。以下是一些具体的方法和建议:
1. 硬件优化
- 使用 SSDs: 使用固态硬盘(SSD)而非机械硬盘(HDD),因为 SSD 在随机读写和低延迟方面表现更好。
- 增加内存: 增加服务器的内存可以让更多的数据保留在内存中,减少磁盘 I/O 操作。Elasticsearch heavily relies on the operating system's filesystem cache, so more RAM can improve performance.
- 合理的 CPU 配置: 确保有足够的 CPU 资源来处理查询和索引操作。虽然 ES 是 I/O 密集型的,但在高并发查询时,CPU 也会成为瓶颈。
2. Elasticsearch 配置优化
- 合理设置
index.refresh_interval
: 默认为 1s。对于写入密集型应用,可以适当增加这个值;对于读密集型,应保持较低。 - 使用
doc_values
: 对于聚合、排序等操作,确保字段是doc_values
启用的,这样可以减少内存使用并提高性能。 - 调整堆内存(Heap Size): 堆内存不宜过大也不宜过小,一般建议设置为物理内存的 50%,但不超过 32GB(因为 JVM 会使用压缩指针)。
- 索引分片和副本: 合理设置索引的分片(shards)和副本(replicas)数量。分片过多或过少都会影响性能。副本数可以根据读取压力调整以提高读取性能。
3. 映射和索引设计
- 避免使用高基数字段进行聚合: 高基数字段(字段中唯一值非常多的字段)进行聚合会消耗大量资源。
- 使用合适的字段类型: 比如,使用
keyword
类型而非text
类型进行精确匹配查询。 - 禁用
_all
字段: 如果不需要,可以在映射中禁用_all
字段来节省空间和提高索引效率。 - 使用
index_options
和norms
: 对于不需要全文搜索的字段,可以在映射中设置index_options
为docs
,并禁用norms
。
4. 查询优化
- 利用 filter context: 对于不需要计分的查询,使用 filter context(如
bool/filter
),这样可以利用缓存,提高查询效率。 - 避免深分页: 使用
search_after
或游标(scroll/cursor)来替代深分页,因为深分页会随着分页深度的增加而变得非常慢。 - 使用
bool
查询优化: 尽量使用bool
查询合并多个查询条件,而不是多次单独查询。 - 预计算重复查询: 对于重复的、不经常变化的查询结果,可以考虑预计算和缓存结果。
5. 监控与调整
- 使用 Elasticsearch 监控工具: 如 Elastic Stack 的 X-Pack、Elasticsearch-head、Kibana 的 Monitoring 功能来监控集群状态和性能。
- 定期查看慢查询日志: 分析并优化慢查询,找出性能瓶颈。
6. 其他技巧
- 批量处理: 使用批量 API (
_bulk
) 进行数据的批量插入、更新和删除。 - 避免脚本: 尽量避免在查询中使用脚本,因为脚本会显著降低查询速度。
- 合理使用缓存: 利用 Elasticsearch 的请求缓存和字段数据缓存,但也需要注意不要过度依赖缓存,以免造成内存压力。
根据您的具体使用场景(如文本搜索、日志分析、数据聚合等),优化策略会有所不同。理解并监控您的具体负载是制定有效优化策略的关键。
二、怎么查看当前的分片数
在 Elasticsearch 中,查看当前的分片数可以通过多种方式实现,包括使用 Elasticsearch 的 REST API、Kibana Dev Tools 或者其他管理工具。以下是几种常用的方法来查看索引的分片信息:
1. 使用 Elasticsearch REST API
查看集群中所有索引的分片数
要查看集群中所有索引的分片配置,可以使用 _cat/indices
API 并添加 v
参数使输出更易于阅读。例如:
curl -X GET "http://localhost:9200/_cat/indices?v"
这个命令会列出所有索引及其相关信息,包括每个索引的分片数(pri
表示主分片数,rep
表示每个主分片的副本数)。
查看特定索引的分片数
如果你只对某个特定索引的分片信息感兴趣,可以使用 _settings
API 来获取详细信息。如下所示:
curl -X GET "http://localhost:9200/<index_name>/_settings?pretty"
这里 <index_name>
替换为你的索引名。这个请求将返回该索引的设置信息,包括分片数。输出中 "number_of_shards"
和 "number_of_replicas"
分别表示主分片数和副本分片数。
2. 使用 Kibana Dev Tools
如果你使用 Kibana,可以通过 Kibana 的 Dev Tools 来执行上述 API 调用。
- 打开 Kibana
- 点击左侧菜单中的 "Dev Tools"
- 在 Console 中输入以下命令查看所有索引的分片信息:
GET /_cat/indices?v
或者查看特定索引的分片数:
GET /<index_name>/_settings
这里 <index_name>
是你想查看的索引名称。
3. 查看集群的整体分片状态
你还可以查看集群的整体分片状态,包括每个分片是主分片还是副本分片,以及它们的健康状态等信息:
curl -X GET "http://localhost:9200/_cat/shards?v"
或在 Kibana Dev Tools 中:
GET /_cat/shards?v
这将列出所有分片的详细信息。
4. 使用 Elasticsearch-head 或其他插件
如果你安装了 Elasticsearch-head 插件或其他类似的 Elasticsearch 管理和监控插件,你可以通过这些插件的 GUI 查看分片信息。这通常包括:
- 打开 Elasticsearch-head
- 导航到对应的索引信息页面
- 查看索引的分片配置和状态
小结
- 查看所有索引的分片信息:使用
_cat/indices
API。 - 查看特定索引的分片信息:使用
<index_name>/_settings
API。 - 查看详细分片状态:使用
_cat/shards
API。
根据你的需求,选择合适的方法来查看分片信息。这些信息有助于你评估当前的 Elasticsearch 设置,并进一步优化配置。
相关文章:
【DevOps】怎么提升Elasticsearch 的搜索性能
一、怎么提升Elasticsearch 搜索性能 提升 Elasticsearch (ES) 的搜索性能可以从多个角度进行优化,包括硬件选择、配置调整、查询优化等。以下是一些具体的方法和建议: 1. 硬件优化 使用 SSDs: 使用固态硬盘(SSD)而…...

启动任何类型操作系统:不需要检索 ISO 文件 | 开源日报 No.243
netbootxyz/netboot.xyz Stars: 7.7k License: Apache-2.0 netboot.xyz 是一个方便的平台,可以不需要检索 ISO 文件就能启动任何类型操作系统或实用工具磁盘。它使用 iPXE 提供用户友好的 BIOS 菜单,让您轻松选择所需的操作系统以及特定版本或可引导标志…...

Linux——综合实验
要求 按照上面的架构部署一个简单的web节点所有的服务器使用DNS服务器作为自己的DNS服务器 就是/etc/reslov.conf 中nameserver的值必须是途中dns服务器的地址所有的数据库都是用mysql应用 nfs共享导出在客户端(web服务器上)使用autofs在自动挂载,或者写入/etc/fsta…...
oracle数据库用户名修改
在Oracle数据库中,修改用户名通常涉及一系列步骤。以下是修改Oracle数据库用户名的详细步骤: 修改前准备工作: 使用ssh工具以root身份连接服务器。 切换到oracle用户:su - oracle(回车) 使用sqlplus连接数…...

2024年开抖音小店需要多少钱?你真的知道吗?最新入驻条件及费用
大家好,我是电商花花。 现在仍然有很多想开抖店,想做抖音小店,但是很多人都不知道投资一家抖音小店需要多少钱,今天花花就给大家讲一下做一家抖音小店需要投入多少资金,以及具体投入到哪些方面。 我们就说一下个体店…...

Vue创建todolist
电子书 第三章: https://www.dedao.cn/ebook/reader?idV5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO 没有使用VUE CLI创建项目。 创建步骤: 1, 用Vite 创建项目 2, npm run dev 运行程序 参照之前的文…...
了解Ansible Playbook
在现代IT运维中,自动化部署成为了提高效率、降低错误率的重要手段之一。而Ansible作为一种强大的自动化工具,其Playbook机制为自动化部署提供了灵活、可扩展的解决方案。本文将深入介绍Ansible Playbook的概念、结构、语法和常见用法,帮助读者…...

nginx 负载均衡、反向代理实验
nginx 负载均衡、反向代理实验 实验目的 理解概念:明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能:学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用:通过实际操作,体验Nginx如何提升Web服务的可…...

Linux信号捕捉
要处理信号, 我们进程就得知道自己是否收到了信号, 收到了哪些信号, 所以进程需要再合适的时候去查一查自己的pending位图 block 位图 和 hander表, 什么时候进行检测呢? 当我们的进程从内核态返回到用户态的时候&…...
【Leetcode】 top100 round2 需要加强版
知识补充 python赋值的执行顺序: 在41中,对于测试案例[-1,4,3,1] 当i1时,以下两条语句的执行结果不一致: “nums[nums[i]-1], nums[i] nums[i], nums[nums[i]-1]” “nums[i], nums[nums[i]-1] nums[nums[i]-1], nums[i]” 解析…...

ElasticSearch知识点汇总
1、ES中的倒排索引是什么。 倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典映射表即为倒排索引 2、ES是如何实现master选举的。 选举过程主要包括以下几个步骤: 心跳检测: 每个节点…...
phpize +Visual Studio + MSYS2 + bison 草稿记录并未正常完成
phpize Visual Studio MSYS2 bison 先安装 Visual Studio https://visualstudio.microsoft.com/zh-hans/vs/ 在安装过程中,选择安装工作负载。确保选择了 C 工作负载以及适用于 C 开发的相关组件,例如 MSVC v142 - VS 2022 C x64/x86 build tools。 …...

网络安全与IP地址的关联
网络安全与IP地址之间存在着密不可分的关系。IP地址作为网络通信的基础,对于网络安全的保障具有至关重要的作用。以下将详细探讨网络安全与IP地址之间的关联,以及IP地址在网络安全中的应用。 一、IP地址与网络安全的关系 IP地址是网络通信的基础&#x…...

罗德与施瓦茨 SMC100A信号发生器9kHz至3.2 GHz
罗德与施瓦茨 SMC100A信号发生器,9 kHz - 3.2 GHz 罗德与施瓦茨 SMC100A 以极具吸引力的价格提供出色的信号质量。它覆盖的频率范围为 9 kHz 至 1.1 GHz 或 3.2 GHz。输出功率为典型值。> 17 dBm。所有重要功能(AM/FM/φM/脉冲调制)均已集…...

新能源汽车充电站智慧充电电能服务综合解决方案
安科瑞薛瑶瑶18701709087/17343930412 ★解决方案 ✔目的地充电-EMS微电网平台 基于EMS解决方案从设备运维的角度解决本地充电的能量管理及运维问题,与充电管理平台打通数据,为企业微电网提供源、网、荷、储、充一体化解决方案。 ✔运营场站--电能服务…...

pytest(二):关于pytest自动化脚本编写中,初始化方式setup_class与fixture的对比
一、自动化脚本实例对比 下面是一条用例,使用pytest框架,放在一个类中,两种实现方式: 1.1 setup_class初始化方式 1. 优点: 代码结构清晰,setup_class 和 teardown_class 看起来像传统的类级别的 setup 和 teardown 方法。2. 缺点: 使用 autouse=True 的 fixture 作为…...
项目中遇到的问题
web项目中请求线程到service层的时候远程调用服务之前是串行化执行每个任务都要get阻塞等待任务完成,举例当用户在购物车页面点击去结算就会请求后台toTrade请求获取订单确认的详情数据并渲染到订单详情页,现在在toTrade请求中使用异步任务编排Completab…...

Deeplab的复现(pytorch实现)
DeepLab复现的pytorch实现 本文复现的主要是deeplabv3。使用的数据集和之前发的文章FCN一样,没有了解的可以移步到之前发的文章中去查看一下。 1.该模型的主要结构 对于代码部分,主要只写了模型部分的,其他部分内容基本和FCN的一致…...
input上添加disabled=“true“,点击事件失效处理办法
当我们给input标签上添加disabled"true"时,再添加点击事件,点击事件会不生效,处理办法如下: 给input标签添加样式style"pointer-events: none;" 代码如下: <input style"pointer-event…...

精酿啤酒的魅力:啤酒的与众不同风味
啤酒,作为世界上古老的酒精饮品之一,一直以来都以其与众不同的魅力吸引着无数人的味蕾。而精酿啤酒,作为啤酒中的佼佼者之一,更是以其丰富的口感和多样的风格,成为了啤酒爱好者的心头好。在这其中,Fendi cl…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...