Elasticsearch 是一个基于 分布式架构 的开源搜索引擎,使用 全文检索引擎 Apache Lucene 作为底层技术实现。它能够提供强大的搜索、数据存储和分析功能,适用于海量数据的实时搜索和分析场景。
全文检索:
分布式架构:
实时性:
高可用性:
丰富的查询功能:
易于扩展:
存储数据:
搜索功能:
数据分析:
实时日志处理:
文档(Document):
Elasticsearch 的最小数据单元,存储为 JSON 格式,例如:
{
"id": "1",
"title": "Elasticsearch Tutorial",
"content": "Elasticsearch is a search engine."
}
索引(Index):
user_index
product_index
分片(Shard):
副本(Replica):
集群(Cluster):
节点(Node):
全文检索:
日志分析:
电商搜索:
数据监控与报警:
实时分析:
Elasticsearch 是一个强大且灵活的分布式搜索和分析引擎,具备高性能、高可用性和丰富的功能,能够处理海量数据的实时检索与分析。在日志分析、全文搜索、电商搜索等领域,Elasticsearch 已成为事实上的行业标准。
Elasticsearch 和 Solr 都是基于 Apache Lucene 的开源搜索引擎,主要用于全文检索、数据分析和实时查询。这两者虽然共享 Lucene 的核心,但在架构、功能和适用场景上有显著差异。
对比维度 | Elasticsearch | Solr |
---|---|---|
架构 | 分布式架构,原生支持分布式环境和高可用性。 | 支持分布式,但依赖外部 ZooKeeper 进行集群管理。 |
安装和配置 | 安装简单,开箱即用,默认即支持分布式。 | 需要额外配置 ZooKeeper 来实现分布式部署和管理。 |
实时性 | 高度支持实时数据写入和查询,适合动态数据场景。 | 数据写入后需提交(commit)操作,实时性稍差。 |
数据存储格式 | 数据以 JSON 格式存储,支持嵌套对象和复杂结构。 | 支持 XML、JSON 等多种格式,但对复杂嵌套结构支持有限。 |
查询语言 | 自带 DSL(Domain Specific Language),灵活且强大。 | 使用 Lucene 查询语法和 Solr Query,语法稍显复杂。 |
分布式扩展 | 默认支持分片和副本管理,轻松扩展节点,分布式特性优越。 | 分布式功能依赖于 ZooKeeper,扩展性稍弱。 |
聚合和分析 | 内置强大的聚合功能,适合实时数据分析(如日志、指标)。 | 聚合功能较弱,更多依赖外部工具。 |
生态系统 | 是 Elastic Stack 的一部分,支持 Logstash 和 Kibana,提供完整的日志分析解决方案。 | 与其他工具(如 Banana)集成,生态体系相对不统一。 |
性能 | 在实时性和分布式场景下性能更高,尤其是高并发写入和搜索。 | 在静态数据、批量索引场景中表现更好。 |
适用场景 | 适用于实时日志分析、电商搜索、时间序列数据处理等。 | 适用于传统全文检索、批量索引和结构化搜索。 |
terms
聚合、日期直方图等,适合实时数据分析。场景 | Elasticsearch | Solr |
---|---|---|
实时日志分析 | 优势明显,Elastic Stack 提供完整解决方案。 | 需要配合其他工具(如 Banana),整合复杂。 |
电商搜索 | 支持嵌套查询、聚合分析,适合实时商品搜索。 | 适合静态商品搜索场景。 |
时间序列数据处理 | 内置时间聚合功能,适合处理时间序列数据。 | 功能相对薄弱。 |
传统全文检索 | 支持全文检索,但偏向实时场景。 | 在静态全文检索场景中表现更稳定。 |
Elasticsearch:
Solr:
如果业务需要实时性和强大的数据分析能力,选择 Elasticsearch 更合适;如果业务数据是静态的且搜索功能复杂,Solr 可能是更优的选择。
在 Elasticsearch(以及全文检索领域)中,正向索引 和 倒排索引 是两种核心的数据结构,用于存储和搜索文档内容。
正向索引 是按文档存储内容的一种索引方式,即记录文档的 ID 和内容的映射关系。
工作原理:
优点:
缺点:
示例:
文档 ID | 文档内容 |
---|---|
1 | “Elasticsearch 是搜索引擎” |
2 | “Elasticsearch 使用倒排索引” |
倒排索引 是一种为关键词建立索引的存储方式,即记录每个关键词与包含该关键词的文档 ID 的映射关系。
工作原理:
优点:
缺点:
示例:
文档:
倒排索引结构:
关键词 | 文档列表 |
---|---|
Elasticsearch | Doc1, Doc2 |
是 | Doc1 |
搜索引擎 | Doc1 |
使用 | Doc2 |
倒排索引 | Doc2 |
特性 | 正向索引 | 倒排索引 |
---|---|---|
存储结构 | 按文档存储内容 | 按关键词存储文档映射 |
搜索效率 | 低,需要逐个扫描文档 | 高,直接查找关键词对应的文档列表 |
存储需求 | 存储文档的完整内容 | 存储关键词与文档 ID 的映射 |
适用场景 | 适合逐个读取文档的场景 | 适合关键词搜索和全文检索的场景 |
倒排索引是核心
正向索引的补充
_source
字段)。_source
用于返回查询结果时获取文档的完整内容,但不参与实际搜索。假设有以下文档:
文档 ID | 文档内容 |
---|---|
Doc1 | “Elasticsearch 是一个搜索引擎” |
Doc2 | “搜索引擎使用倒排索引” |
关键词 | 文档列表 |
---|---|
Elasticsearch | Doc1 |
是 | Doc1 |
一个 | Doc1 |
搜索引擎 | Doc1, Doc2 |
使用 | Doc2 |
倒排索引 | Doc2 |
搜索 “搜索引擎”:
返回文档内容:
_source
)提取完整的文档内容。正向索引:
倒排索引:
在 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 ?