当前位置: 首页 > 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.lryc.cn/news/604068.html

相关文章:

  • 【高等数学】第七章 微分方程——第三节 齐次方程
  • 监控场景视频质量异常修复:陌讯动态增强算法实战解析
  • CVPR 2025 | 华科精测:无需人工标注也能精准识别缺陷类别,AnomalyNCD 实现多类别缺陷自主分类
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-45,(知识点:负反馈的作用,基础理解,干扰和噪声的抑制)
  • 某雷限制解除:轻松获取原始下载链接,支持多任务转换
  • 笔试——Day22
  • 枚举中间位置高级篇
  • 【C++算法】79.BFS解决FloodFill算法_图像渲染
  • K8s集群两者不同的对外暴露服务的方式
  • 2025年JCR一区新算法-回旋镖气动椭圆优化算法Boomerang Aerodynamic Ellipse(BAE)-附Matlab免费代码
  • 小程序发票合并功能升级!发票夹直接选,操作更便捷
  • Python爬虫03_Requests破解百度翻译
  • 三步给小智ESP32S3智能语音硬件接入小程序打通MCP服务
  • ClickHouse MergeTree引擎:从核心架构到三级索引实战
  • 数字ic后端设计从入门到精通13(含fusion compiler, tcl教学)全定制版图设计
  • 通过双网口实现两台设备共享网络与文件传输
  • python线性回归:从原理到实战应用
  • 负载均衡、算法/策略
  • 【iOS】类扩展与关联对象
  • 深入解析RocksDB的MVCC和LSM Tree level
  • Vulnhub-NAPPING: 1.0.1靶机
  • 汉得班翎流程平台V1.20.0正式发布:AI智慧赋能,集成效率跃升!
  • ZKmall开源商城架构工具链:Docker、k8s 部署与管理技巧
  • 基于三台主机搭建 Web 服务环境:Nginx、NFS 与 DNS 配置全流程
  • 机械学习--线性回归---三个小案例
  • Kun_Tools(全能文档工具)V0.4.6 便携版
  • 2025年中科院与JCR期刊分区深度对比(第一期):TON中科院分区3区不变,JCR分区升至Q1;TOSEM重回中科院1区!
  • I2C 与 SMBus:同根同源,各有千秋
  • 学习Python中Selenium模块的基本用法(3:下载浏览器驱动续)
  • 美国股市高频tick级分时交易数据解码与订单簿及交易指令分析