Elasticsearch到底是什么(非常详细)
Elasticsearch 是一款开源的搜索和分析引擎。它是用 Java 开发的,基于流行的全文搜索库 Apache Lucene 构建的超快速、高可用的搜索引擎。
Elasticsearch 通过提供具有 RESTful 接口的分布式系统对 Lucene 的强大功能进行了封装。Lucene 是 Elasticsearch 的核心,而 Kibana 是管理和使用 Elasticsearch 的管理界面。
全文搜索是 Elasticsearch 作为现代搜索引擎所擅长的地方。它可以根据用户的搜索条件快速地找出相关的文档,用户也可以搜索精确的内容,如关键词、日期、数字范围或日期范围。Elasticsearch 还拥有一系列高级功能,如相关性、“你是不是想找”的搜索建议、搜索内容自动补全、模糊搜索、地理空间搜索和高亮显示等。
除了在提供近实时搜索能力方面处于领先地位,Elasticsearch 在大数据的统计聚合方面也表现不俗。当然,我们必须根据使用场景来考虑是否采用这款产品,因为 Elasticsearch 可能并不适合每种使用场景(后续会讲)。除此之外,Elasticsearch 还拥有一系列值得称道的功能,如应用性能监控、预测分析和异常检测,以及安全威胁监控和检测等。
Elasticsearch 专注于在收集的数据中发掘更深层次的含义。它可以聚合数据、完成统计计算,并在数据中发现有价值的信息。我们可以使用 Kibana 工具创建丰富的可视化图表和仪表板,并与他人共享。Elasticsearch 可以计算平均值、总和、中位数和众数,还可以对数据进行复杂的分析,如在直方图中对数据进行分桶和其他分析功能。
此外,Elasticsearch 还能在数据上运行有监督和无监督的机器学习算法。模型有助于检测异常、找到离群值和预测事件。在监督学习模式下,我们可以提供训练集,以便模型进行学习并做出预测。
Elasticsearch 还具有通过监控网络中 Web 服务器的性能指标(如内存和 CPU 周期)来观察应用及其健康状况的能力。它让用户可以筛查数百万条 Web 服务器的日志,以便找到或调试应用的问题。Elasticsearch 还投入时间和资源构建安全领域的解决方案,如安全威胁警报、IP 过滤、端点防护等。

图 1 Elasticsearch背后的Elastic公司的核心应用领域
搜索可以深度集成到各领域(业务、基础设施、应用等)众多应用中。用户可以创建由 Elasticsearch 支持的 Web 应用、由 Elasticsearch 支持的移动应用或者以 Elasticsearch为核心的服务器端搜索服务。
这 4 种产品的组合通过集成、消费、处理、分析、搜索和存储来自不同来源的各种数据集,来帮助构建企业级应用。

图 2 Elastic Stack:Beats、Logstash、Elasticsearch和Kibana
如上图所示,Beats 和 Logstash 将数据写入 Elasticsearch,而 Kibana 则是对这些数据进行可视化的用户界面。
在深入了解 Elasticsearch 的使用场景之前,我们简单地从宏观层面了解一下这些必要的组件。
多种类型的 Beats 开箱即用,包括 Filebeat、Metricbeat、Heartbeat 等,每种都可以完成特定的数据消费任务。这些都是单一用途的组件,例如,Filebeat 用于基于文件的传输,Metricbeat 用于采集重要的机器和操作系统的内存及CPU信息。
Beats 的代理安装在服务器上,以便它们可以从来源消费数据并将其发送到目的地。
Logstash 支持众多的来源和目的地,包括文件、HTTP、JMS、Kafka、Amazon S3、Twitter 等几十种。它提出了一种管道架构,每个通过管道的事件都根据预配置的规则进行解析和处理,从而创建出一个实时的数据摄取管道。
例如,我们可以使用 cURL、Postman 或各种语言的客户端来调用 API。
下面我们大体看一下 Elasticsearch 是如何在一个组织中使用的。
在应用搜索中,Elasticsearch 作为核心为应用提供搜索和分析功能。Elasticsearch 支持的搜索服务可以设计为满足应用的搜索需求(如搜索客户、订单、发票、电子邮件等)的微服务。
在大多数组织中,数据分散在许多数据存储、应用和数据库中。例如,组织通常与 Confluence、内网空间、Slack、电子邮件、数据库、云盘(iCloud drive、Google Drive等)等进行集成。对这些组织而言,整合并搜索来自各种来源的海量数据是一个挑战。这正是 Elasticsearch 可以用于企业搜索和数据组织的地方。
如果我们有一个已经积累了数据的在线商业网站,那么提供搜索功能就是吸引客户并让他们感到满意的基本条件。网站搜索是 Elastic 提供的一种软件即服务(SaaS)产品,一旦启动,它就会爬取给定的网站页面,抓取数据并构建由 Elasticsearch 支持的索引。爬取和索引完成后,网站就可以轻松地与搜索功能集成。网站搜索模块还可以帮助创建搜索栏和相关的代码片段。网站管理员将生成的代码片段嵌入网站的主页,就能轻松地启用搜索栏,从而使网站集成完整的搜索功能。
Elasticsearch 的一个常见使用场景就是索引并分析日志,以达到对应用进行调试和错误分析的目的。
虽然 Elasticsearch 是一个强大且灵活的搜索和分析引擎,但它并不适用于所有场景。下面就简要讨论一下我们可能遇到的问题和不适合使用 Elasticsearch 的场景。
下面是几种 Elasticsearch 可能不适用或效率不高的场景。
如果数据之间关系很强,那么像 MySQL 或 PostgreSQL 这样的关系数据库可能是更好的选择。大多数现代数据库(MySQL、PostgreSQL 等)也提供全文搜索功能,尽管这些功能并不像 Elasticsearch 这样的现代搜索引擎那样先进。
Elasticsearch 通过提供具有 RESTful 接口的分布式系统对 Lucene 的强大功能进行了封装。Lucene 是 Elasticsearch 的核心,而 Kibana 是管理和使用 Elasticsearch 的管理界面。
全文搜索是 Elasticsearch 作为现代搜索引擎所擅长的地方。它可以根据用户的搜索条件快速地找出相关的文档,用户也可以搜索精确的内容,如关键词、日期、数字范围或日期范围。Elasticsearch 还拥有一系列高级功能,如相关性、“你是不是想找”的搜索建议、搜索内容自动补全、模糊搜索、地理空间搜索和高亮显示等。
除了在提供近实时搜索能力方面处于领先地位,Elasticsearch 在大数据的统计聚合方面也表现不俗。当然,我们必须根据使用场景来考虑是否采用这款产品,因为 Elasticsearch 可能并不适合每种使用场景(后续会讲)。除此之外,Elasticsearch 还拥有一系列值得称道的功能,如应用性能监控、预测分析和异常检测,以及安全威胁监控和检测等。
Elasticsearch 专注于在收集的数据中发掘更深层次的含义。它可以聚合数据、完成统计计算,并在数据中发现有价值的信息。我们可以使用 Kibana 工具创建丰富的可视化图表和仪表板,并与他人共享。Elasticsearch 可以计算平均值、总和、中位数和众数,还可以对数据进行复杂的分析,如在直方图中对数据进行分桶和其他分析功能。
此外,Elasticsearch 还能在数据上运行有监督和无监督的机器学习算法。模型有助于检测异常、找到离群值和预测事件。在监督学习模式下,我们可以提供训练集,以便模型进行学习并做出预测。
Elasticsearch 还具有通过监控网络中 Web 服务器的性能指标(如内存和 CPU 周期)来观察应用及其健康状况的能力。它让用户可以筛查数百万条 Web 服务器的日志,以便找到或调试应用的问题。Elasticsearch 还投入时间和资源构建安全领域的解决方案,如安全威胁警报、IP 过滤、端点防护等。
核心领域
Elastic 是 Elasticsearch 背后的公司,这家公司主要关注 3 个核心领域,即搜索、可观测性和安全性,如下图所示。
图 1 Elasticsearch背后的Elastic公司的核心应用领域
1) Elastic企业搜索
无论是让用户在不同的内容提供商(如Slack、Confluence、Google Drive等)之间进行搜索,还是为应用、软件和网站启用搜索功能,Elastic 企业搜索套件都有助于构建模型和定制化的搜索引擎。搜索可以深度集成到各领域(业务、基础设施、应用等)众多应用中。用户可以创建由 Elasticsearch 支持的 Web 应用、由 Elasticsearch 支持的移动应用或者以 Elasticsearch为核心的服务器端搜索服务。
2) Elastic可观测性
在基础设施上运行的应用会产生大量的指标数据,这些指标数据通常用于应用的可观测性和监控。我们可以在可观测性领域使用 Elasticsearch,应用、服务器、机架和模块的状态都可以被监控、记录、跟踪和告警。我们还可以使用 Elastic 工具进行大规模的应用管理和监控。3) Elastic安全性
Elastic 可以在安全领域进行威胁检测和预防,并提供源头恶意软件移除、静态加密等高级功能。作为安全信息和事件管理(security information and event management,SIEM)工具,Elastic 正在寻找自己的定位,并通过其先进的安全工具箱来保护组织。Elastic Stack
Elasticsearch 是搜索引擎的核心,而 Elastic 的几款产品对其进行了补充。这套产品称为 Elastic Stack,包括 Kibana、Logstash、Beats 和 Elasticsearch。(这套产品以前被称为 ELK Stack,但在 Beats 被引入产品套件后更名为 Elastic Stack。)这 4 种产品的组合通过集成、消费、处理、分析、搜索和存储来自不同来源的各种数据集,来帮助构建企业级应用。

图 2 Elastic Stack:Beats、Logstash、Elasticsearch和Kibana
如上图所示,Beats 和 Logstash 将数据写入 Elasticsearch,而 Kibana 则是对这些数据进行可视化的用户界面。
在深入了解 Elasticsearch 的使用场景之前,我们简单地从宏观层面了解一下这些必要的组件。
1) Beats
Beats 是单一用途的数据传输工具,它们从各种外部系统加载数据并将其写入 Elasticsearch。多种类型的 Beats 开箱即用,包括 Filebeat、Metricbeat、Heartbeat 等,每种都可以完成特定的数据消费任务。这些都是单一用途的组件,例如,Filebeat 用于基于文件的传输,Metricbeat 用于采集重要的机器和操作系统的内存及CPU信息。
Beats 的代理安装在服务器上,以便它们可以从来源消费数据并将其发送到目的地。
2) Logstash
Logstash 是一个开源的数据处理引擎。它从多个来源提取数据并处理它们,然后将其发送到各种目的地。在数据处理过程中,Logstash 会转换和丰富数据。Logstash 支持众多的来源和目的地,包括文件、HTTP、JMS、Kafka、Amazon S3、Twitter 等几十种。它提出了一种管道架构,每个通过管道的事件都根据预配置的规则进行解析和处理,从而创建出一个实时的数据摄取管道。
3) Kibana
Kibana 是一个多用途的 Web 控制台,提供了包括执行查询,开发仪表板、可视化图表,创建下拉列表和聚合等多种选项。然而,我们可以使用任何 REST 客户端与 Elasticsearch 通信来调用 API,不限于 Kibana。例如,我们可以使用 cURL、Postman 或各种语言的客户端来调用 API。
Elasticsearch的使用场景
将 Elasticsearch 仅限定于某个特定的使用场景或领域是比较困难的。Elasticsearch 在从搜索到分析再到机器学习的许多领域都无处不在。它被广泛应用于多个行业,包括金融、国防、交通、政府、零售、云计算、娱乐、航天等。下面我们大体看一下 Elasticsearch 是如何在一个组织中使用的。
1) 搜索引擎
Elasticsearch 凭借其全文搜索能力成为首选技术。但它不局限于全文搜索,还可用于结构化数据和基于地理位置的搜索等。总的来说,客户在 3 个领域使用 Elasticsearch,即应用搜索、企业搜索和网站搜索。在应用搜索中,Elasticsearch 作为核心为应用提供搜索和分析功能。Elasticsearch 支持的搜索服务可以设计为满足应用的搜索需求(如搜索客户、订单、发票、电子邮件等)的微服务。
在大多数组织中,数据分散在许多数据存储、应用和数据库中。例如,组织通常与 Confluence、内网空间、Slack、电子邮件、数据库、云盘(iCloud drive、Google Drive等)等进行集成。对这些组织而言,整合并搜索来自各种来源的海量数据是一个挑战。这正是 Elasticsearch 可以用于企业搜索和数据组织的地方。
如果我们有一个已经积累了数据的在线商业网站,那么提供搜索功能就是吸引客户并让他们感到满意的基本条件。网站搜索是 Elastic 提供的一种软件即服务(SaaS)产品,一旦启动,它就会爬取给定的网站页面,抓取数据并构建由 Elasticsearch 支持的索引。爬取和索引完成后,网站就可以轻松地与搜索功能集成。网站搜索模块还可以帮助创建搜索栏和相关的代码片段。网站管理员将生成的代码片段嵌入网站的主页,就能轻松地启用搜索栏,从而使网站集成完整的搜索功能。
2) 业务分析
组织会从各种来源获取大量数据,而这些数据通常是其生存和成功的关键。Elasticsearch 可以帮助组织从数据中提取趋势、统计和指标信息,为组织提供有关其运营、销售、营业额、利润等多个特征的信息,以便进行及时管理。3) 安全分析以及威胁和欺诈检测
数据安全及潜在的漏洞是组织的噩梦。Elasticsearch 的安全分析可以帮助组织分析每处信息——无论是来自应用、网络、终端还是来自云。这种分析可以提供对威胁和漏洞的洞察,让组织及时发现恶意软件和勒索软件,从而降低被黑客攻击的风险。4) 日志和应用监控
应用会产生大量的应用日志和指标数据。这些日志可以洞察应用的健康状态。随着云计算和微服务时代的到来,日志分散在各个服务中,要进行有意义的分析变得十分烦琐。这时,Elasticsearch 就成为我们的好帮手。Elasticsearch 的一个常见使用场景就是索引并分析日志,以达到对应用进行调试和错误分析的目的。
虽然 Elasticsearch 是一个强大且灵活的搜索和分析引擎,但它并不适用于所有场景。下面就简要讨论一下我们可能遇到的问题和不适合使用 Elasticsearch 的场景。
不适合Elasticsearch的使用场景
Elasticsearch 并非适用于每种使用场景。它是一个强大且灵活的搜索和分析引擎,但遗憾的是,这个工具也有其局限性。在选择 Elasticsearch 来满足需求之前,我们必须把这些局限性纳入考虑范围。下面是几种 Elasticsearch 可能不适用或效率不高的场景。
1) 关系数据
当数据具有关系并且需要进行复杂的数据库连接时,Elasticsearch 不是一个合适的选择。Elasticsearch不是为处理复杂的关系数据结构设计的。如果数据之间关系很强,那么像 MySQL 或 PostgreSQL 这样的关系数据库可能是更好的选择。大多数现代数据库(MySQL、PostgreSQL 等)也提供全文搜索功能,尽管这些功能并不像 Elasticsearch 这样的现代搜索引擎那样先进。