69道Elasticsearch高频题整理(附答案背诵版)

简述什么是Elasticsearch?

参考回答

Elasticsearch 是一个基于 分布式架构 的开源搜索引擎,使用 全文检索引擎 Apache Lucene 作为底层技术实现。它能够提供强大的搜索、数据存储和分析功能,适用于海量数据的实时搜索和分析场景。


Elasticsearch 的核心特点

  1. 全文检索

    • 提供强大的全文检索能力,支持模糊搜索、前缀搜索、短语搜索等多种高级搜索功能。
  2. 分布式架构

    • 支持水平扩展,数据分布在多个节点上,提高性能和容灾能力。
  3. 实时性

    • 数据写入后几乎可以立即被搜索(通常延迟在秒级别)。
  4. 高可用性

    • 通过主从节点、副本分片机制,确保服务的高可用性和数据安全性。
  5. 丰富的查询功能

    • 支持结构化和非结构化数据查询,包括布尔查询、范围查询、聚合分析等。
  6. 易于扩展

    • 可通过插件或 API 轻松扩展功能,如安全性插件、机器学习扩展等。

Elasticsearch 的主要功能

  1. 存储数据

    • 作为一个分布式文档存储引擎,支持 JSON 格式的数据存储。
  2. 搜索功能

    • 提供全文检索、精准匹配、多字段组合搜索等能力。
  3. 数据分析

    • 支持复杂的数据聚合操作,能够快速生成统计信息。
  4. 实时日志处理

    • 常与 Logstash 和 Kibana 配合使用,构成 ELK/Elastic Stack,用于实时日志监控与分析。

Elasticsearch 的基本概念

  1. 文档(Document)

    • Elasticsearch 的最小数据单元,存储为 JSON 格式,例如:

      {
        "id": "1",
        "title": "Elasticsearch Tutorial",
        "content": "Elasticsearch is a search engine."
      }
      
  2. 索引(Index)

    • 文档的集合,类似于数据库中的表。一个索引可以存储同类型的数据,例如:
      • 用户数据索引:user_index
      • 产品数据索引:product_index
  3. 分片(Shard)

    • 为了支持大规模数据存储和分布式操作,索引会被分成多个分片。
    • 每个分片可以单独存储在不同的节点上。
  4. 副本(Replica)

    • 每个分片可以有多个副本,用于提高查询性能和容灾能力。
  5. 集群(Cluster)

    • 一个 Elasticsearch 集群由多个节点组成,提供统一的搜索和数据存储服务。
  6. 节点(Node)

    • 集群中的一个单独实例,每个节点存储部分数据并执行部分搜索和索引操作。

Elasticsearch 的应用场景

  1. 全文检索

    • 适用于搜索引擎、文档管理系统、知识库等场景。
  2. 日志分析

    • 与 Logstash 和 Kibana 结合,实现实时日志收集、存储、搜索和可视化分析。
  3. 电商搜索

    • 支持多字段组合搜索、商品排序、价格筛选等功能。
  4. 数据监控与报警

    • 监控系统性能、网络流量,并结合阈值触发报警。
  5. 实时分析

    • 分析用户行为数据、应用性能数据等,为业务提供数据支持。

总结

Elasticsearch 是一个强大且灵活的分布式搜索和分析引擎,具备高性能、高可用性和丰富的功能,能够处理海量数据的实时检索与分析。在日志分析、全文搜索、电商搜索等领域,Elasticsearch 已成为事实上的行业标准。

简述ElasticSearch对比Solr

参考回答

ElasticsearchSolr 都是基于 Apache Lucene 的开源搜索引擎,主要用于全文检索、数据分析和实时查询。这两者虽然共享 Lucene 的核心,但在架构、功能和适用场景上有显著差异。


Elasticsearch 与 Solr 的对比

对比维度 Elasticsearch Solr
架构 分布式架构,原生支持分布式环境和高可用性。 支持分布式,但依赖外部 ZooKeeper 进行集群管理。
安装和配置 安装简单,开箱即用,默认即支持分布式。 需要额外配置 ZooKeeper 来实现分布式部署和管理。
实时性 高度支持实时数据写入和查询,适合动态数据场景。 数据写入后需提交(commit)操作,实时性稍差。
数据存储格式 数据以 JSON 格式存储,支持嵌套对象和复杂结构。 支持 XML、JSON 等多种格式,但对复杂嵌套结构支持有限。
查询语言 自带 DSL(Domain Specific Language),灵活且强大。 使用 Lucene 查询语法和 Solr Query,语法稍显复杂。
分布式扩展 默认支持分片和副本管理,轻松扩展节点,分布式特性优越。 分布式功能依赖于 ZooKeeper,扩展性稍弱。
聚合和分析 内置强大的聚合功能,适合实时数据分析(如日志、指标)。 聚合功能较弱,更多依赖外部工具。
生态系统 是 Elastic Stack 的一部分,支持 Logstash 和 Kibana,提供完整的日志分析解决方案。 与其他工具(如 Banana)集成,生态体系相对不统一。
性能 在实时性和分布式场景下性能更高,尤其是高并发写入和搜索。 在静态数据、批量索引场景中表现更好。
适用场景 适用于实时日志分析、电商搜索、时间序列数据处理等。 适用于传统全文检索、批量索引和结构化搜索。

详细解析

1. 架构对比
  • Elasticsearch
    • 原生分布式设计,支持动态扩展节点和高可用性。
    • 自动管理分片(Shard)和副本(Replica),开发者无需额外配置。
  • Solr
    • 分布式特性依赖于外部 ZooKeeper,安装和管理较为复杂。
    • 分片和副本需要手动配置,运维成本较高。
2. 数据实时性
  • Elasticsearch
    • 数据写入后几乎可以立即被搜索(通常延迟在秒级)。
  • Solr
    • 数据需要手动提交(commit)后才能被搜索,实时性较差。
3. 查询语言
  • Elasticsearch
    • 提供简洁灵活的 DSL 查询语言,支持嵌套查询和复杂查询。
  • Solr
    • 使用 Lucene 查询语法,功能强大但语法复杂。
4. 聚合与分析
  • Elasticsearch
    • 内置丰富的聚合功能,如 terms 聚合、日期直方图等,适合实时数据分析。
  • Solr
    • 聚合能力有限,更多场景需借助外部工具。
5. 扩展性
  • Elasticsearch
    • 动态扩展节点,数据和流量会自动重新平衡,方便维护。
  • Solr
    • 需要手动调整分片分配,并依赖 ZooKeeper 管理集群状态。
6. 生态系统
  • Elasticsearch
    • 是 Elastic Stack 的核心,与 Logstash(数据收集)和 Kibana(数据可视化)深度集成。
  • Solr
    • 与其他工具的整合较少,生态系统相对不统一。

适用场景对比

场景 Elasticsearch Solr
实时日志分析 优势明显,Elastic Stack 提供完整解决方案。 需要配合其他工具(如 Banana),整合复杂。
电商搜索 支持嵌套查询、聚合分析,适合实时商品搜索。 适合静态商品搜索场景。
时间序列数据处理 内置时间聚合功能,适合处理时间序列数据。 功能相对薄弱。
传统全文检索 支持全文检索,但偏向实时场景。 在静态全文检索场景中表现更稳定。

总结

  1. Elasticsearch

    • 适用于实时搜索、日志分析、高并发写入场景。
    • 原生分布式设计,适合动态数据处理和实时分析。
  2. Solr

    • 适合静态全文检索、大规模批量索引场景。
    • 对传统搜索场景更为稳定,但分布式扩展性较差。

如果业务需要实时性和强大的数据分析能力,选择 Elasticsearch 更合适;如果业务数据是静态的且搜索功能复杂,Solr 可能是更优的选择。

Elasticsearch 什么是正向索引?什么是倒排索引?

参考回答

Elasticsearch(以及全文检索领域)中,正向索引倒排索引 是两种核心的数据结构,用于存储和搜索文档内容。


1. 正向索引

正向索引 是按文档存储内容的一种索引方式,即记录文档的 ID 和内容的映射关系。

工作原理

  1. 每个文档被存储为一条记录,记录包含文档的唯一标识符(ID)和文档的完整内容。
  2. 要查找某个关键词时,需要逐个文档扫描内容,找到包含关键词的文档。

优点

  • 文档的内容完整存储,便于直接读取和处理。

缺点

  • 搜索效率低,需要遍历每个文档,特别是在关键词搜索时,性能较差。

示例

文档 ID 文档内容
1 “Elasticsearch 是搜索引擎”
2 “Elasticsearch 使用倒排索引”
  • 如果搜索 “倒排索引”,需要扫描所有文档内容,找到包含该词的文档。

2. 倒排索引

倒排索引 是一种为关键词建立索引的存储方式,即记录每个关键词与包含该关键词的文档 ID 的映射关系。

工作原理

  1. 对文档的内容进行分词,将其拆分成关键词(terms)。
  2. 为每个关键词创建一个记录,标记出包含该关键词的文档列表。
  3. 搜索时直接查找关键词对应的文档列表,效率极高。

优点

  • 搜索效率高,尤其适合全文检索和关键词查询。
  • 不需要逐个扫描文档内容,大大减少查询时间。

缺点

  • 不存储文档的完整内容,仅存储关键词到文档的映射,需要配合其他数据结构存储完整内容。

示例
文档:

  • Doc1: “Elasticsearch 是搜索引擎”
  • Doc2: “Elasticsearch 使用倒排索引”

倒排索引结构:

关键词 文档列表
Elasticsearch Doc1, Doc2
Doc1
搜索引擎 Doc1
使用 Doc2
倒排索引 Doc2
  • 搜索 “倒排索引” 时,直接定位到 Doc2。

3. 正向索引与倒排索引的对比

特性 正向索引 倒排索引
存储结构 按文档存储内容 按关键词存储文档映射
搜索效率 低,需要逐个扫描文档 高,直接查找关键词对应的文档列表
存储需求 存储文档的完整内容 存储关键词与文档 ID 的映射
适用场景 适合逐个读取文档的场景 适合关键词搜索和全文检索的场景

4. Elasticsearch 中的应用

  1. 倒排索引是核心

    • Elasticsearch 的全文检索完全基于倒排索引。
    • 每个字段都会生成倒排索引,存储关键词到文档的映射。
  2. 正向索引的补充

    • Elasticsearch 使用正向索引存储文档的完整内容(即 _source 字段)。
    • _source 用于返回查询结果时获取文档的完整内容,但不参与实际搜索。

5. 示例分析

假设有以下文档:

  • Doc1: “Elasticsearch 是一个搜索引擎”
  • Doc2: “搜索引擎使用倒排索引”
正向索引存储
文档 ID 文档内容
Doc1 “Elasticsearch 是一个搜索引擎”
Doc2 “搜索引擎使用倒排索引”
倒排索引存储
关键词 文档列表
Elasticsearch Doc1
Doc1
一个 Doc1
搜索引擎 Doc1, Doc2
使用 Doc2
倒排索引 Doc2
  • 搜索 “搜索引擎”

    • 根据倒排索引直接找到 Doc1 和 Doc2。
  • 返回文档内容

    • Elasticsearch 会使用正向索引(_source)提取完整的文档内容。

6. 总结

  • 正向索引

    • 按文档存储内容,适合逐个文档处理,但搜索效率低。
  • 倒排索引

    • 按关键词存储文档映射,是 Elasticsearch 的核心,用于高效的全文检索。

在 Elasticsearch 中,正向索引和倒排索引相辅相成:倒排索引用于高效搜索,正向索引用于返回完整的文档内容,从而实现高性能的全文检索引擎。

4. 简述ElasticSearch的数据模型核心概念?

5. 详细描述 Elasticsearch 搜索的过程?

6. Elasticsearch 是如何实现Master选举的 ?

7. 详细描述Elasticsearch索引⽂档的过程?

8. ES中match和term差别对比,text和keyword区别、bool查询?

9. 阐述Elasticsearch如何确保数据一致性 ?

10. ElasticSearch vs Lucene的关系 ?

11. 简述Elasticsearch中文分词 ?

12. Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一个 master,另外 10 个选了另一个 master,怎么办?

13. Elasticsearch 客户端在和集群连接时,如何选择特定的节点执行请求的?

14. 详细描述Elasticsearch 更新和删除文档的过程?

15. Elasticsearch 对于大数据量(上亿量级)的聚合如何实现?

16. 简述Elasticsearch 数据类型?

17. 简述Elasticsearch 的底层存储原理?

18. Elasticsearch 读取数据(文档)的过程?

19. Elasticsearch 删除、更改文档的过程?

20. 解释 Elasticsearch 中的相关性和得分?

21. 在Elasticsearch中 按 ID检索文档的语法是什么?

22. Elasticsearch 中列出集群的所有索引的语法是什么?

23. 简述Elasticsearch的文档是什么?

24. 能否在 Elasticsearch 中定义映射?

25. Elasticsearch 与关系型数据库对比?

26. 简述什么是Elasticsearch Node?

27. 简单阐述Elasticsearch Cluster?

28. 如何启动 Elasticsearch 服务器?

29. 安装 Elasticsearch 需要依赖什么组件吗?

30. REST API在 Elasticsearch 方面有哪些优势?

31. Elasticsearch在部署时,对Linux的设置有哪些优化方法?

32. 简述Elasticsearch拼写纠错实现原理 ?

33. 简述ElasticSearch 分片数量?副本数量的设定 ?

34. ElasticSearch JVM 调优?调整哪些参数?

35. 如何监控ElasticSearch的集群状态?

36. 简述Elasticsearch出现脑裂的原因?如何解决?

37. Elasticsearch 中执行搜索的各种可能方式有哪些?

38. Elasticsearch 支持哪些类型的查询?

39. ElasticSearch 精准匹配检索和全文检索匹配检索的不同?

40. 解释一下 Elasticsearch 中聚合?

41. Elasticsearch 中的数据存储流程简述 ?

42. 请列出 Elasticsearch 各种类型的分析器 ?

43. 简述如何使用 Elasticsearch Tokenizer?

44. 简述Token filter 过滤器 在 Elasticsearch 中如何工作?

45. Master 节点和 候选 Master节点有什么区别?

46. 简述Elasticsearch中的属性 enabled, index 和 store 的功能?

47. Elasticsearch Analyzer 中的字符过滤器如何利用?

48. 解释有关 Elasticsearch的 NRT?

49. Elasticsearch 支持哪些配置管理工具?

50. 解释一下X-Pack for Elasticsearch的功能?

51. 简述Elasticsearch中 cat API的功能?

52. 描述Elasticsearch 中常用的 cat命令有哪些?

53. 详细说明ELK Stack ?

54. Kibana在Elasticsearch的哪些地方以及如何使用?

55. Logstash 如何与 Elasticsearch 结合使用?

56. Beats 如何与 Elasticsearch 结合使用?

57. 简述什么是Elasticsearch 数据预热?

58. 对于GC方面,在使用Elasticsearch时要注意什么?

59. 阐述什么是ElasticSearch 字典树?

60. 请举例ELK日志分析相关的应用场景?

61. 简述ElasticSearch 冷热架构?

62. 简述Docker中安装Elasticsearch?

63. 简述Elasticsearch(ES)配置及优化措施 ?

64. 阐述ElasticSearch核心配置文件 ?

65. 如何修改Elasticsearch最大返回结果数 ?

66. 理解PHP中使用Elasticsearch的方法?

67. Logstash如何把MySQL数据库中的数据导入到Elasticsearch?

68. 简述Elasticsearch和Redis区别?

69. Java如何操作Elasticsearch ?

你可能感兴趣的:(elasticsearch,jenkins,大数据)