当前位置: 首页 > news >正文

Elasticsearch重点

1. 什么是Elasticsearch?它的主要特点是什么?

答案: Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。主要特点包括:

  • 分布式架构,支持水平扩展

  • 近实时(NRT)搜索能力

  • 多租户支持,通过索引隔离数据

  • 强大的全文搜索能力

  • 支持结构化查询和非结构化查询

  • RESTful API接口

  • 支持多种语言客户端(包括Java)

2. 解释Elasticsearch中的索引(Index)、文档(Document)和分片(Shard)概念

答案

  • 索引(Index):类似传统数据库中的"数据库",是文档的集合

  • 文档(Document):索引中的基本数据单元,使用JSON格式表示

  • 分片(Shard):索引被分割成的部分,每个分片本身是一个功能完整的"索引"

    • 主分片(Primary Shard):处理索引和查询请求

    • 副本分片(Replica Shard):主分片的拷贝,提供故障转移和高可用性

3. Elasticsearch为什么比传统数据库搜索快?

答案: Elasticsearch搜索速度快的主要原因:

  • 使用倒排索引结构,快速定位包含查询词的文档

  • 所有数据默认被索引,适合搜索场景

  • 分布式架构可以并行处理查询

  • 数据存储在内存中(文件系统缓存)而不是磁盘

  • 使用高效的数据压缩算法

  • 避免了传统数据库的ACID特性带来的开销

4. 什么是倒排索引?它是如何工作的?

答案: 倒排索引是Elasticsearch的核心数据结构,由两部分组成:

  1. 词项字典(Term Dictionary):包含所有文档中出现的唯一词项

  2. 倒排列表(Postings List):记录每个词项出现在哪些文档中及位置信息

工作流程:

  • 对文档内容进行分词处理

  • 建立词项到文档的映射关系

  • 查询时先找到词项,再快速定位相关文档

5. 解释Elasticsearch的GET和Search API的区别

答案

特性GET APISearch API
用途通过ID获取单个文档执行查询返回多个文档结果
性能更快相对较慢
结果返回单个完整文档返回匹配文档的列表和元数据
路由直接路由到特定分片查询所有相关分片
使用场景已知文档ID时获取文档内容需要搜索或过滤文档时
示例GET /index/_doc/1GET /index/_search

6. 如何优化Elasticsearch的查询性能?

答案: 优化查询性能的常用方法:

  1. 索引设计优化

    • 合理设置分片数量(通常每个分片20-40GB)

    • 使用合适的字段类型和映射

    • 对不需要搜索的字段禁用索引

  2. 查询优化

    • 使用filter代替query进行不相关度评分的过滤

    • 避免使用通配符查询

    • 合理使用分页(避免深分页)

    • 使用bool查询组合多个条件

  3. 硬件/配置优化

    • 增加文件系统缓存

    • 使用SSD硬盘

    • 调整JVM堆大小(不超过物理内存的50%)

7. 如何使用Java API执行Elasticsearch查询?

答案: 使用RestHighLevelClient的示例代码:

// 创建查询
SearchRequest searchRequest = new SearchRequest("index_name");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
​
// 构建bool查询
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("title", "elasticsearch")).filter(QueryBuilders.rangeQuery("date").gte("2022-01-01"));
​
sourceBuilder.query(boolQuery);
sourceBuilder.from(0);
sourceBuilder.size(10);
searchRequest.source(sourceBuilder);
​
// 执行查询
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
​
// 处理结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {String sourceAsString = hit.getSourceAsString();// 处理文档...
}

8. 解释Elasticsearch集群的健康状态及其含义

答案: Elasticsearch集群有三种健康状态:

  1. 绿色(Green)

    • 所有主分片和副本分片都可用

    • 集群功能完全正常

  2. 黄色(Yellow)

    • 所有主分片可用,但部分副本分片不可用

    • 数据没有丢失,但高可用性降低

    • 可能原因:节点离线但尚未超过恢复阈值

  3. 红色(Red)

    • 部分主分片不可用

    • 数据可能丢失,集群功能不完整

    • 需要立即处理

9.MySQL 和 Elasticsearch 通过消息队列(MQ)同步数据的简单流程

  1. 写入阶段

    • 业务应用先写入 MySQL

    • 同时发送一条包含变更数据的消息到 MQ(如 Kafka/RabbitMQ)

  2. 传输阶段

    • MQ 暂存变更消息

    • 按顺序将消息分发给消费者服务

  3. 同步阶段

    • 消费者服务从 MQ 获取消息

    • 将数据转换为 ES 文档格式

    • 通过批量接口写入 Elasticsearch

  4. 容错处理

    • 失败消息自动重试

    • 最终失败的消息进入死信队列

    • 定期执行数据校验修复差异

关键特点:

  • 完全解耦(MySQL 和 ES 不直接交互)

  • 最终一致性(通常延迟在秒级)

  • 支持高并发场景

  • 对业务代码侵入小(只需增加发消息逻辑)

这种方案适合大多数需要异步同步的业务场景,如商品信息同步、订单状态更新等。相比直接双写,通过 MQ 能更好地处理峰值流量和系统故障。

http://www.dtcms.com/a/305337.html

相关文章:

  • 路径平滑优化算法--B样条(B-spline)路径平滑算法
  • 2025年八大OA系统综合评测:Kimi+DeepSeek专业推荐
  • U3D中的package
  • Python 程序设计讲义(27):字符串的用法——字符串的常用操作
  • 自组织粒子群优化算法(Self-Organizing Particle Swarm Optimization, SOPSO)求解Rastrigin函数
  • STM32CubeIDE新建项目过程记录备忘(一)
  • JSON:数据交换格式
  • 本地使用postman调试mcp接口
  • 力扣刷题(第一百零二天)
  • Level2可转换债券高频交易五档行情Tick级分钟历史数据深度解析
  • PDF 文档级脚本(Document Level Scripts)
  • SZU大学物理实验报告|光敏电阻
  • 2025年JCR一区新算法-回旋镖气动椭圆优化算法Boomerang Aerodynamic Ellipse(BAE)-附Matlab免费代码
  • Git分支
  • BGP团体属性实验案例
  • PostgreSQL 中 date_trunc 为什么能走索引?【待验证】
  • 【每日一错】Oracle 19c CDB中如何启动一个PDB
  • 2025数字藏品安全保卫战:高防CDN如何成为NFT应用的“隐形护甲”?
  • 字符串函数安全解析成执行函数
  • AE、VAE与GAN简明指南:三大生成模型对比
  • 二维经验模态分解(BEMD)算法详解与MATLAB实现
  • 地图可视化实践录:开篇需求计划
  • SZU大学物理实验报告|基于应变片的电子秤的设计
  • Python爬虫分析B站番剧播放量趋势:从数据采集到可视化分析
  • 纯血鸿蒙 AudioRenderer+AudioCapturer+RingBuffer 实现麦克风采集+发声
  • 选用Java开发商城的优势
  • 功率场效应晶体管MOSFET关键指标
  • 岩石图文分析系统
  • Gartner发布2025年数据安全技术成熟度曲线:29项最新数据安全相关技术发展和应用趋势
  • 【SQL】Windows MySQL 服务查询启动停止自启动(保姆级)