【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…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...