Elasticsearch使用及常见的问题
Elasticsearch作为一款分布式搜索与分析引擎,其核心优势在于高性能搜索能力,依托倒排索引和分布式架构,可快速处理海量数据及复杂查询,支持实时索引与动态扩容,兼具高可用性和扩展性。其丰富的RESTful API与查询语言降低了开发门槛,开源特性与生态工具(如Kibana、Logstash)集成进一步提升了灵活性。然而,其局限性亦不容忽视:资源消耗较大,处理大数据时需高配置硬件支撑;运维复杂度较高,需专业团队进行集群管理、分片优化及故障排查;安全性依赖插件扩展,内置防护不足;学习曲线陡峭,复杂查询语言与参数调优对新手不友好。此外,小规模数据场景下可能过度设计,且频繁数据更新易引发性能瓶颈。综上,Elasticsearch适用于日志分析、实时检索等大规模场景,但需权衡资源投入与运维成本。
一、核心使用方法
- 索引(Index):类似数据库中的表,存储结构化数据。
- 文档(Document):JSON 格式的数据单元,是索引中的基本存储对象。
- 分片(Shard):索引的分区,支持水平扩展和并行处理。
- 副本(Replica):分片的副本,提供高可用性和负载均衡。
- 节点(Node):Elasticsearch 实例,多个节点组成集群。
-
安装与配置
- 系统要求:Java 11+、至少4GB内存。
- 安装步骤:
- 从官网下载对应系统的安装包。
- Linux/macOS解压后运行
bin/elasticsearch,Windows运行bin/elasticsearch.bat。 - 验证安装:访问
http://localhost:9200,返回节点信息即成功。
-
索引管理
- 创建索引:
PUT /my_index {"settings": {"number_of_shards": 3, // 主分片数"number_of_replicas": 1 // 副本数} } - 查看索引:
GET /_cat/indices?v - 删除索引:
DELETE /my_index
- 创建索引:
-
数据操作
- 插入文档:
POST /my_index/_doc/1 {"name": "John","age": 30 } - 查询文档:
- 精确查询(如ID查询):
GET /my_index/_doc/1 - 全文检索(如
match查询):GET /my_index/_search {"query": {"match": { "name": "John" }} }
- 精确查询(如ID查询):
- 插入文档:
-
高级功能
- 聚合分析:统计年龄分布
GET /my_index/_search {"aggs": {"age_dist": {"terms": { "field": "age" }}} } - 地理空间查询:支持经纬度范围搜索。
- 聚合分析:统计年龄分布
-
高级功能
- 健康状态:GET /_cluster/health 查看集群状态(green/yellow/red)
- 分片分配:手动调整分片分布或排除故障节点。
二、常见问题与解决方案
1. 分片未分配(UNASSIGNED)
- 原因:节点资源不足、分片策略限制或主分片丢失。
- 解决方案:
- 手动分配分片:
POST _cluster/reroute {"commands": [{"allocate_stale_primary": {"index": "my_index","shard": 0,"node": "target_node","accept_data_loss": true}}] } - 调整分片策略:放宽磁盘阈值
PUT _cluster/settings {"persistent": {"cluster.routing.allocation.disk.watermark.low": "90%","cluster.routing.allocation.disk.watermark.high": "95%"} }
- 手动分配分片:
2. 内存溢出(OOM)
- 原因:堆内存设置不合理、字段数据占用过高。
- 解决方案:
- 调整堆内存(
config/jvm.options):-Xms4g -Xmx4g # 建议不超过物理内存的50% - 限制字段数据缓存:
PUT _cluster/settings {"persistent": {"indices.breaker.fielddata.limit": "60%"} }
- 调整堆内存(
3. 集群脑裂(Split-Brain)
- 原因:网络分区或主节点配置不当。
- 预防方案:
- 设置最小主节点数(
elasticsearch.yml):cluster.initial_master_nodes: ["node1", "node2", "node3"] - 使用多可用区(AZ)部署,避免单点故障。
- 设置最小主节点数(
4. 索引损坏
- 修复方法:
- 使用Lucene检查工具:
bin/elasticsearch-shard check --index my_index --shard 0 - 重建索引:
POST _reindex {"source": { "index": "corrupted_index" },"dest": { "index": "recovered_index" } }
- 使用Lucene检查工具:
5. 数据同步问题
- 数据丢失:
- 确保写入时使用
refresh=wait_for或手动刷新。 - 通过
_bulkAPI 确保原子性。
- 确保写入时使用
- 与关系数据库同步:
- 使用 Logstash、CDC 工具(如 Debezium)或应用层双写。
6. 日志管理(ELK 场景)
- 字段类型冲突:
- 提前定义索引模板(
index_template),规范字段映射。
- 提前定义索引模板(
- 日志堆积:
- 设置 ILM(Index Lifecycle Management)自动滚动删除旧索引。
7. 升级与兼容性
- 版本升级:
- 遵循官方升级路径(如 7.x → 8.x),备份数据后逐步迁移。
- 客户端兼容性:
- 确保 SDK 版本与 Elasticsearch 版本匹配。
8. 安全与权限
- 未授权访问:
- 启用安全模块(如 X-Pack 的基础安全功能),配置 HTTPS 和账号密码。
- 权限控制:
- 使用角色(Role)和用户(User)限制索引和 API 访问。
三、性能调优建议
-
硬件优化
- 内存分配:堆内存建议为物理内存的50%,剩余留给文件缓存。
- 磁盘选择:使用SSD或冷热数据分离(热节点SSD,冷节点机械盘)。
-
集群配置
- 节点角色分离:主节点、数据节点、客户端节点独立部署。
- 分片设计:单个分片大小建议10-50GB,避免过小导致资源浪费或过大影响恢复速度。
-
查询优化
- 避免深度分页,使用
search_after替代from/size。 - 限制返回字段(
_source过滤)以减少网络传输。
- 避免深度分页,使用
四、故障排查工具
- 集群健康检查:
GET _cluster/health - 日志分析:查看
logs/目录下的错误日志,关注ERROR、Exception关键字。 - 慢查询分析:
GET /_search/profile - 监控工具:集成Kibana或Prometheus+Grafana实时监控资源使用。
五、典型应用场景
- 全文搜索:支持复杂查询(如多字段匹配、模糊搜索)。
- 日志分析:ELK堆栈(Elasticsearch+Logstash+Kibana)处理海量日志。
- 实时分析:结合Kibana可视化实时数据(如用户行为、交易监控)。
- 地理数据:支持地理围栏查询、位置聚合分析。
通过以上方法,您可以高效使用Elasticsearch并应对常见运维挑战。建议结合官方文档和监控工具持续优化集群性能。
相关文章:
Elasticsearch使用及常见的问题
Elasticsearch作为一款分布式搜索与分析引擎,其核心优势在于高性能搜索能力,依托倒排索引和分布式架构,可快速处理海量数据及复杂查询,支持实时索引与动态扩容,兼具高可用性和扩展性。其丰富的RESTful API与查询语言降…...
Python基础总结(七)之条件语句
文章目录 条件语句if一、Python中的真假二、条件语句格式2.1 if语句格式2.2 if-else语句2.3 if-elif-else语句 三、if语句嵌套 条件语句if 条件语句其实就是if语句,在讲解if语句之前需要知道Python中对于真假的判断。 一、Python中的真假 在Python中非0的都为真&…...
命令update-alternatives
❯ which pip /home/ying/anaconda3/bin/pipying192 ~ [2]> which pip /usr/bin/pip使用update-alternatives对他们进行管理和切换 快捷方式 和 实际路径不可以相同 所以我这边选择了/usr/local/bin目录作为介质存储快捷方式,另外该快捷方式会自己创建我们只需选…...
deekseak 本地windows 10 部署步骤
有些场景需要本地部署,例如金融、医疗(HIPAA)、政府(GDPR)、军工等,需完全控制数据存储和访问权限,避免云端合规风险或者偏远地区、船舶、矿井等无法依赖云服务,关键设施(…...
MySQL中常用函数的分类及示例
概述 以下是 MySQL 中常用函数的分类及示例,涵盖字符串处理、数值计算、日期操作、条件判断等常见场景: 一、字符串函数 1. CONCAT(str1, str2, ...) 拼接字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello World2. SUBSTRING(str, start,…...
<sql>、<resultMap>、<where>、<foreach>、<trim>、<set>等标签的作用和用法
目录 一. sql 代码片段标签 二. resultMap 映射结果集标签 三. where 条件标签 四. set 修改标签 五. trim 标签 六. foreach 循环标签 一. sql 代码片段标签 sql 标签是 mybatis 框架中一个非常常用的标签页,特别是当一张表很有多个字段多,或者要…...
企业级HAProxy高可用离线部署实战(附Kubernetes APIServer负载均衡配置)
企业级HAProxy高可用离线部署实战(附Kubernetes APIServer负载均衡配置) 摘要:本文深入讲解在离线环境下部署HAProxy 3.1.1的全流程,涵盖源码编译、系统服务封装、K8S APIServer四层负载配置等核心环节,并提供生产级高…...
实现Azure Databricks安全地请求企业内部API返回数据
需要编写一个Databricks在Azure云上运行,它需要访问企业内部的API获取JSON格式的数据,企业有网关和防火墙,API有公司的okta身份认证,通过公司的域账号来授权访问,现在需要创建一个专用的域账号,让Databrick…...
kafka认证部署
首先启动 zookeeper /home/kafka/bin/zookeeper-server-start.sh /home/kafka/config/zookeeper.properties 创建SCRAM证书 /home/kafka/bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config SCRAM-SHA-256[iterations8192,passwordliebe],SCRAM-SHA-512[p…...
【项目】CherrySudio配置MCP服务器
CherrySudio配置MCP服务器 (一)Cherry Studio介绍(二)MCP服务环境搭建(1)环境准备(2)依赖组件安装<1> Bun和UV安装 (3)MCP服务器使用<1> 搜索MCP…...
【LeetCode 热题 100】双指针 系列
📁283. 移动零 对于该题目,需要注意的是两个地方,一是保持非零元素的相对顺序,以及O(1)的空间复杂度。 采用双指针的思路,将数组划分成3个区间,。 [0 , left]:该区间内元素全是非零元素。 [left1 , right…...
【技术派后端篇】 Redis 实现用户活跃度排行榜
在各类互联网应用中,排行榜是一个常见的功能需求,它能够直观地展示用户的表现或贡献情况,提升用户的参与感和竞争意识。在技术派项目中,也引入了用户活跃度排行榜,该排行榜主要基于 Redis 的 ZSET 数据结构来实现。接下…...
模拟算法(一)作业分析及答案
目录 作业1:角谷猜想 解题思路 : 代码实现: 作业2:校门外的树 解题思路 注意事项 代码实现 作业3:乒乓球 编辑 问题重述 解题思路: 作业1:角谷猜想 【描述】 所谓角谷猜想…...
西红柿番茄检测数据集VOC+YOLO格式2320张1类别可用于计数
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2320 标注数量(xml文件个数):2320 标注数量(txt文件个数):2320 …...
企业级实战:将Java服务打包为Docker镜像的两种高效方法
企业级实战:将Java服务打包为Docker镜像的两种高效方法 摘要:本文针对Java服务容器化部署场景,提供 基于容器Commit 和 Dockerfile构建 两种镜像制作方案。重点解决动态库依赖、信号量配置、环境变量注入等企业级痛点问题,并提供…...
专题十六:虚拟路由冗余协议——VRRP
一、VRRP简介 VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议通过把几台设备联合组成一台虚拟的设备,使用一定的机制保证当主机的下一跳设备出现故障时,及时将业务切换到备份设备,从而保持通讯的连续性和…...
Java中常见的锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
在Java中,锁是实现多线程同步的核心机制。不同的锁适用于不同的场景,理解其实现原理和使用方法对优化性能和避免并发问题至关重要。 一、隐式锁:synchronized 关键字 实现原理 基于对象监视器(Monitor):每…...
DDPM(diffusion)原理
DDPM(diffusion)原理 1、DDPM(原理)2、DDPM和 Conditional DDPM(原理解释)2.1. Diffusion Models 原理详解核心思想前向扩散过程(Forward Diffusion)反向去噪过程(Revers…...
《软件设计师》复习笔记(2.2)——效验码、体系结构、指令、流水线
目录 一、校验码 码距 奇偶校验码 循环冗余校验码(CRC) 海明码 真题示例: 二、体系结构 Flynn分类法 三、指令系统 指令组成 指令执行过程 指令的寻址方式 操作数的寻址方式 CISC vs RISC 真题示例: 四、流水线技…...
BT1120 BT656驱动相关代码示例
前些年做视频输出项目的时候用过bt1120 tx与rx模块,现将部分代码进行记录整理。代码功能正常,可正常应用。 1. rx部分: /****************************************************************************** Copyright (C) 2021,All rights …...
2025.04.19-阿里淘天春招算法岗笔试-第一题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 字符交换智慧 问题描述 卢小姐有一个长度为 n n n 的字符串...
IsaacSim Asserts 配置
IsaacSim Asserts 配置 背景解决方案资源准备具体操作步骤验证 背景 我是习惯使用 isaacsim 的 standalone 模式,使用 python 脚本直接运行 script,然后弹窗,按照规则正确运行即可,但是,这就导致了一些问题出现&#…...
关于viewpager常见的泄漏
在一个页面中 如果有用到tab,有需要进行fragment的切换,经常就看到了private var fragments arrayListOf<Fragment>()private fun initFragment() {arguments?.let {hopeToPosition it.getInt(IntentConstant.MAIN_PAGE_GO, 0)workoutType it.…...
深入剖析 C/S 与 B/S 架构及网络通信基础
目录 C/S 架构详解 概念与示例 优点 B/S 架构详解 概念与示例 优势 缺点 C/S 与 B/S 的区别 架构组成 使用场景 开发和维护 安全性 网络通信基础 IP 地址 MAC(物理地址) 端口 路由器 网关 子网掩…...
接口自动化 ——fixture allure
一.参数化实现数据驱动 上一篇介绍了参数化,这篇 说说用参数化实现数据驱动。在有很多测试用例的时候,可以将测试用例都存储在文件里,进行读写调用。本篇主要介绍 csv 文件和 json 文件。 1.读取 csv 文件数据 首先创建 csv 文件ÿ…...
systemctl管理指令
今天我们来继续学习服务管理指令,接下来才是重头戏-systemctl,那么话不多说,直接开始吧. systemctl管理指令 1.基本语法: systemctl [start | stop | restart | status]服务 注:systemctl指令管理的服务在/usr/lib/ systemd/system查看 2.systemctl设置服务的自…...
【文件操作与IO】详细解析文件操作与IO (二)
本篇博客是上一篇文章的续写,重点介绍数据流,还包括三道练习题. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心…...
go-map+sync.map的底层原理
map 哈希冲突解决方式 1.拉链法 2.开放地址法 底层结构 Go 的 map 在源码中由 runtime.hmap 结构体表示,buckets-指向桶数组的指针(常规桶),oldbuckets-扩容时指向旧桶数组的指针。 type hmap struct {count int // 当前元素个数(len…...
java怎么找bug?Arthas原理与实战指南
Arthas原理与实战指南 1. Arthas简介 Arthas是阿里巴巴开源的Java诊断工具,其名字取自《魔兽世界》的人物阿尔萨斯。它面向线上问题定位,被广泛应用于性能分析、定位问题、安全审计等场景。Arthas的核心价值在于它能够在不修改应用代码、不重启Java进程…...
Windows使用SonarQube时启动脚本自动关闭
一、解决的问题 Windows使用SonarQube时启动脚本自动关闭,并发生报错: ERROR: Elasticsearch did not exit normally - check the logs at E:\Inori_Code\Year3\SE\sonarqube-25.2.0.102705\sonarqube-25.2.0.102705\logs\sonarqube.log ERROR: Elastic…...
