Elasticsearch 7 SQL搜索优化

全面升级可增强查询功能,提高集群性能并简化集群配置。

Elasticsearch 7 SQL搜索优化

Elasticsearch最初是一个文档数据库,位于Lucene文本搜索引擎库之上。不久后,被一些相关的应用程序开始进行使用,Elasticsearch系列产品的缩写是ELK:Elasticsearch;Logstash,数据管道工具,主要用于从Elasticsearch数据库中获取数据;还有数据可视化构建工具包Kibana。

此后,ELK三人组加入了一个小的“数据托运人”实用程序:Beats产品。与Logstash相似,Beats产品将数据从外部源移动到Elasticsearch数据库中。它们在运送数据的来源方面有所不同。Filebeat旨在读取和转发日志文件的内容(例如Logstash,但没有Logstash的转换和聚合功能)。Metricbeat读取从Windows,Mac或Linux主机收集的系统指标数据。Metricbeat还可以从Microsoft SQL Server,MySQL,PostgreSQL和其他来源收集企业应用程序指标。

Beats组中有很多兄弟产品。您可以在Elastic网站上找到Beats的全系列。同样,随着Elastic Stack 7.x的推出而出现的功能和产品更新也是一个很长的话题。尽管对于Elastic Stack 7.x发行版中各个组件的所有更新都有很多话要说,但是本文将主要集中于对堆栈基础的增强和改进:Elasticsearch本身。

Elasticsearch SQL

Elasticsearch工程师不得不尝试将SQL移植到Elasticsearch上。有太多的数据库技术人员,他们每天都在使用SQL,SQL查询引擎将为RDBMS用户在Elasticsearch领域铺平道路。

需要说明的是,Elasticsearch并不支持所有特定的SQL标准(其中有几个)。大多数情况下,您可以进行搜索,这意味着您可以使用SELECT和DESCRIBE命令。后者(DESCRIBE)显示特定索引的模式。

那么,SELECT是如何工作的呢?Elasticsearch SQL在线文档是如何包含一些前所未闻的词的,比如“表”和“列”?

必要时,Elasticsearch查询在事件范围的两侧跳动,将关系数据库部分与NoSQL数据库部分分隔开来。因此,当SQL涉及到Elasticsearch时,索引变成表,字段变成列。这种重命名是必要的,这样任何熟悉SQLite中的.schema命令的人都会觉得很熟悉。而且,DESCRIBE命令的输出(一个显示列,SQL类型和相应的Elasticsearch数据类型的ASCII表)将非常容易。

当然,字段不能简单地充当列的角色。Elasticsearch允许在文档字段中嵌套对象——字段中的字段。幸运的是,索引模式的ElasticsearchSQL输出处理这个问题的方式与Elasticsearch处理底层情况的方式相同:点符号用于“拼合”嵌套字段。
如上所述,您不能插入、更新或删除。也不能执行联接、联合或嵌套选择。但是您可以使用Elasticsearch的聚合和统计运算符,并且可以检索查询得分。因此,虽然Elasticsearch的SQL乍一看似乎没什么活力,但它实际上非常健壮,特别是它让RDBMS工程师过渡到Elasticsearch变得更加容易。
最后,虽然可以通过Elasticsearch的REST API提交SQL查询,但现在可以使用ODBC和JDBC驱动程序来在Windows和Java应用程序中启用Elasticsearch SQL查询。

Elasticsearch中的副本选择

Elasticsearch7.x的一些改进就是所谓的“基础结构升级”。自适应副本选择是在Elasticsearch 6.x中进行的;它在Elasticsearch 7中已经成熟。其目的是为了解决一些问题,即在执行搜索时,对副本节点的循环选择可能落在一个正忙于执行垃圾收集或遭受其他性能下降(如磁盘I/O或网络饱和)的节点上甚至可能是所选节点是在功能较弱的硬件上运行(与其同级副本节点相比)。
从用户应用程序接收查询的节点称为“协调器”节点。协调器将查询分散到所有相关的数据节点,这些节点执行实际的数据库搜索。自适应副本选择提供协调节点“看到”的数据节点的性能状态。协调器能够使用这些状态来选择给定副本集中的最佳节点,从而最大限度地提高为特定副本集绑定的查询部分接收到尽可能快的响应的可能性。
注意:分片是索引的分区,是索引元素的子集。该索引分为多个分片,以便可以在群集节点之间分布。为了容错,给定的分片将复制到多个节点上。承载给定碎片副本的节点集是一个副本集,其成员称为副本。
集群协调是另一个重要且持续变化的领域(事实上,自从第一个Elasticsearch 7.x版本发布以来,已经发生了变化)。“发现”是集群用来标识其所有成员节点以及确定哪个主节点是集群主节点的过程。发现必须快速有效。发现必须迅速而有效;不完整的节点成员可能会创建一个“分裂的大脑”,即两个集群应该是一个集群。(他们分离的时间越长,他们的内容就越分散。)快速确定集群的主节点是最重要的。主节点不仅是集群当前配置和状态的真实来源,而且主节点是唯一可以更改集群状态的节点。主节点负责对所有集群成员执行ping操作,以验证集群运行状况。
过去,Elasticsearch使用Zen发现机制,该机制支持多种形式的发现(单播,基于文件等)。随着时间的流逝,Elasticsearch工程师认识到正确配置Elasticsearch集群的发现参数非常重要。他们目睹了许多错误的配置,最终导致了不稳定。因此,Elasticsearch已迁移到单个发现实施,从而消除了不稳定的风险。集群管理员不再需要调整配置参数,并希望最新的调整不会使集群性能下降。(然而,根据给定实例的环境,可以使用“发现插件”来增强发现过程。发现插件的列表可以在Elastic网站找到。)

Elasticsearch中的跨集群搜索

在以往的版本中,如果希望搜索跨多个集群,则可以将参与群集中的特定节点选为“tribe”节点。实际上,一个tribe节点是多个集群的成员(考虑双重或多重身份)。因此,发送到一个tribe节点(将成为该查询的协调节点)的查询将扩展到该tribe节点所属的所有集群。
当tribe节点所属的两个集群具有相同名称的索引时,这种方法的一个缺点就出现了:当满足查询请求时,tribe节点只选择这两个集群中的一个。现在,跨集群搜索允许您选择特定的节点作为“网关”节点,这些节点可以接收来自集群之外的查询请求—不再具有双重身份。此外,当您想要查询远程集群的索引时,可以在索引前面加上集群名称,类似于<cluster_name>:<index>。因此,不再需要在同名索引中任意选择tribe节点。
实际上,Elasticsearch网关节点的行为就像协调节点一样。在另一个旨在将CPU和网络压力最小化(从而减少往返查询时间)的改进中,对远程查询做出响应的Elasticsearch集群首先执行自己的查询结果缩减阶段,然后将结果返回给调用者。

Elasticsearch查询改进

一些新功能扩展了Elasticsearch已经广泛的查询功能。例如,新的rank_feature和rank_features字段类型,再加上新的“ rank feature”查询,提供了相关性调整,如果没有大量的培训集和人力来梳理培训结果,这是一项很难完成的活动。这些新的字段类型似乎是普通的浮点值数据字段,但经过精心设计,可以将它们添加到文档的分数中,使您可以在特定查询中调整文档的相关性。例如,您可能想要在rank_feature字段中获取文档受欢迎程度的值,并将其合并到文档的查询相关性得分中。
此外,这些字段可以用于搜索优化,称为“top-k检索优化”,这也是Elasticsearch 7中的新功能。简而言之,这些优化允许Elasticsearch获取查询中最相关文档的请求子集(因此称为“top-k”),而无需遍历所有适用的搜索结果。
另一种受益于“top-k检索优化”的新查询类型是新的“距离特性”查询。顾名思义,这种查询类型允许您根据时间间隔中与原点的接近程度对结果进行评分。可以参与距离查询的字段类型有date、date_nanos和geo_point类型。因此,文档的空间或时间类型字段与原点之间的距离大小可能会增加(或减少)文档的查询分数。

高级REST客户端

在分类的开发方面,虽然Java高级REST客户端出现在Elasticsearch 6.0 beta版本中,但它最终在Elasticsearch 7.0版本中宣告完成。在这种情况下,意味着现在可以使用高级REST客户端来代替传输客户端(它意味着要替换传输客户端)。
Java高级别REST客户端位于Java低级别REST客户端之上,可用于通过HTTP与Elasticsearch集群进行通信。但是,低级REST客户端将请求编组和响应编组留给用户。同时,高级REST客户端将请求和响应表示为对象。这允许高级REST客户端公开特定的API,而不需要调用者与通用HTTP方法调用进行交互。

Kibana改进

最后,有必要讨论一下Kibana,因为它已经从一种数据可视化工具发展为一种Elasticsearch超级仪表板。Kibana最初是一个用于创建和显示实时数据可视化线形图、条形图、饼图等的平台,从Elasticsearch数据库实时绘制。尽管Kibana仍然是一个可视化构建器,但它现在为管理、开发、机器学习、数据探索等提供了控制台。
例如:Kibana的索引管理控制台中,可以显示字段映射(索引模式)、索引摘要指标(文档数量、消耗的磁盘存储空间等)、索引默认参数(碎片数量、嵌套字段限制)等统计信息。

原文链接🔗:https://www.infoworld.com/article/3442739/review-elasticsearch-boosts-search-with-sql-optimizations.html