一种基于Elasticsearch的数据查询方法及装置
文献发布时间:2023-06-19 10:54:12
技术领域
本申请涉及数据查询技术领域,具体而言,涉及一种基于Elasticsearch的数据查询方法及装置。
背景技术
ElasticSearch是一个分布式、高扩展、高实时的搜索与数据分析引擎,实现对海量日志数据的分析。现有的基于ElasticSearch的数据查询方法,通常通过DSL(DomainSpecific Languag,特定领域语言)查询语句实现。然而,实践中发现,现有的基于ElasticSearch的数据查询方法,需要先学习比较复杂的DSL语言,这对于大多用户来说都太过于专业,不易使用,在对专业查询语法不熟悉时,利用专业语法进行检索的效率很低。可见,现有的基于ElasticSearch的数据查询方法,需要学习DSL语言,学习成本高,降低了检索效率。
发明内容
本申请实施例的目的在于提供一种基于Elasticsearch的数据查询方法及装置,能够简化查询语法,进而有利于提升检索效率。
本申请实施例第一方面提供了一种基于Elasticsearch的数据查询方法,包括:
获取用户输入的SQL数据查询指令;
根据所述SQL数据查询指令确定聚合统计参数;
根据所述聚合统计参数和所述SQL数据查询指令,生成综合查询语句;
根据所述综合查询语句进行基于Elasticsearch的查询,得到数据查询结果。
在上述实现过程中,在进行基于Elasticsearch的数据查询时,先获取用户输入的SQL数据查询指令;然后根据SQL数据查询指令确定聚合统计参数,以及根据聚合统计参数和SQL数据查询指令,生成综合查询语句;最后,根据综合查询语句进行基于Elasticsearch的查询,得到数据查询结果,实现了直接编写SQL数据查询指令就能实现多维度聚合指标统计,无需学习比较复杂的Elasticsearch的DSL查询语法,简化了查询语法,降低了业务开发人员的学习成本,进而有利于提升检索效率。
进一步地,所述SQL数据查询指令包括SQL查询语句和查询参数,其中,所述查询参数包括时间字段标识和度量值字段标识。
在上述实现过程中,用户在输入SQL查询指令时,只需要同时输入相应的时间字段标识和度量值字段标识,就能够根据时间字段标识和度量值字段标识确定出相应的时间字段和度量字段,简化了查询语法,进而有利于提升检索效率。
进一步地,所述聚合统计参数包括聚合统计函数和聚合统计时间;
所述根据所述SQL数据查询指令确定聚合统计参数,包括:
对所述SQL查询语句进行解析处理,得到所述SQL查询语句中的统计函数;
根据所述统计函数和所述度量值字段标识,生成所述聚合统计函数;
根据所述时间字段标识确定所述聚合统计时间。
在上述实现过程中,在获取到SQL查询语句之后,先对SQL查询语句进行解析处理得到SQL查询语句中的统计函数,然后,根据统计函数和度量值字段标识,生成聚合统计函数,最后再根据时间字段标识确定聚合统计时间,进而得到聚合统计参数。
进一步地,所述根据所述聚合统计参数和所述SQL数据查询指令,生成综合查询语句,包括:
将所述聚合统计函数添加至所述SQL查询语句中,得到初步查询语句;
根据所述聚合统计时间和所述初步查询语句,生成综合查询语句。
在上述实现过程中,先将聚合统计函数添加至SQL查询语句中,得到初步查询语句,最后得到的综合查询语句包括初步查询语句和聚合统计时间。
进一步地,所述根据所述综合查询语句进行基于Elasticsearch的查询,得到数据查询结果,包括:
获取所述Elasticsearch的服务地址;
根据所述服务地址创建服务调用对象;
根据所述综合查询语句构建查询请求数据;
将所述查询请求数据配置到所述服务调用对象上,得到目标服务调用对象;
根据所述目标服务调用对象在所述Elasticsearch中进行聚合统计查询,得到数据查询结果。
在上述实现过程中,在进行聚合查询时,先获取Elasticsearch的服务地址,并根据服务地址创建服务调用对象;然后再根据综合查询语句构建查询请求数据,进一步地,将查询请求数据配置到服务调用对象上,得到目标服务调用对象;最后,根据目标服务调用对象在所述Elasticsearch中进行聚合统计查询,得到数据查询结果。通过使用基于Elasticsearch的SQL JDBC的数据源连接池管理,来实现进行基于Elasticsearch的查询的过程,有利于降低查询的网络消耗,进而提升查询性能。
本申请实施例第二方面提供了一种基于Elasticsearch的数据查询装置,所述基于Elasticsearch的数据查询装置包括:
获取单元,用于获取用户输入的SQL数据查询指令;
确定单元,用于根据所述SQL数据查询指令确定聚合统计参数;
生成单元,用于根据所述聚合统计参数和所述SQL数据查询指令,生成综合查询语句;
查询单元,用于根据所述综合查询语句进行基于Elasticsearch的查询,得到数据查询结果。
在上述实现过程中,在进行基于Elasticsearch的数据查询时,获取单元先获取用户输入的SQL数据查询指令;然后确定单元根据SQL数据查询指令确定聚合统计参数,生成单元根据聚合统计参数和SQL数据查询指令,生成综合查询语句;最后,查询单元根据综合查询语句进行基于Elasticsearch的查询,得到数据查询结果,实现了直接编写SQL数据查询指令就能实现多维度聚合指标统计,无需学习比较复杂的Elasticsearch的DSL查询语法,简化了查询语法,降低了业务开发人员的学习成本,进而有利于提升检索效率。
进一步地,所述SQL数据查询指令包括SQL查询语句和查询参数,其中,所述查询参数包括时间字段标识和度量值字段标识。
在上述实现过程中,用户在输入SQL查询指令时,只需要同时输入相应的时间字段标识和度量值字段标识,就能够根据时间字段标识和度量值字段标识确定出相应的时间字段和度量字段,简化了查询语法,进而有利于提升检索效率。
进一步地,所述聚合统计参数包括聚合统计函数和聚合统计时间;
所述确定单元包括:
解析子单元,用于对所述SQL查询语句进行解析处理,得到所述SQL查询语句中的统计函数;
函数生成子单元,用于根据所述统计函数和所述度量值字段标识,生成所述聚合统计函数;
时间确定子单元,用于根据所述时间字段标识确定所述聚合统计时间。
在上述实现过程中,在获取到SQL查询语句之后,解析子单元先对SQL查询语句进行解析处理得到SQL查询语句中的统计函数,然后,函数生成子单元根据统计函数和度量值字段标识,生成聚合统计函数,最后时间确定子单元再根据时间字段标识确定聚合统计时间,进而得到聚合统计参数。
本申请实施例第三方面提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例第一方面中任一项所述的基于Elasticsearch的数据查询方法。
本申请实施例第四方面提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例第一方面中任一项所述的基于Elasticsearch的数据查询方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种基于Elasticsearch的数据查询方法的流程示意图;
图2为本申请实施例提供的另一种基于Elasticsearch的数据查询方法的流程示意图;
图3为本申请实施例提供的一种基于Elasticsearch的数据查询装置的结构示意图;
图4为本申请实施例提供的另一种基于Elasticsearch的数据查询装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参看图1,图1为本申请实施例提供了一种基于Elasticsearch的数据查询方法的流程示意图。该方法的应用于基于Elasticsearch的聚合数据查询的场景中。其中,该基于Elasticsearch的数据查询方法包括:
S101、获取用户输入的SQL数据查询指令。
本申请实施例中,SQL数据查询指令至少包括SQL查询语句,其中,SQL查询语句,即为结构化查询语言(Structured Query Language),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
S102、根据SQL数据查询指令确定聚合统计参数。
本申请实施例中,能够自动根据SQL数据查询指令确定聚合统计参数,不需要用户预先学习聚合统计函数、时间筛选过滤条件、统计分组函数等。
S103、根据聚合统计参数和SQL数据查询指令,生成综合查询语句。
本申请实施例中,SQL数据查询指令不能直接用于Elasticsearch的数据查询,因此,需要通过步骤S102~步骤S103,对SQL数据查询指令进行处理,将其转换为综合查询语句,进而能够根据综合查询语句进行基于Elasticsearch的数据查询。在此过程中,用户不需要学习比较复杂的DSL查询语法,降低了业务开发人员的学习成本,进而有利于提升检索效率。
S104、根据综合查询语句进行基于Elasticsearch的查询,得到数据查询结果。
本申请实施例中,Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎。
本申请实施例中,可以使用基于Elasticsearch的SQL JDBC的数据源连接池管理,来实现进行基于Elasticsearch的查询的过程,有利于降低查询的网络消耗,进而提升查询性能。
本申请实施例中,该方法的执行主体可以为计算机、服务器、智能手机、平板电脑等电子设备,对此本实施例中不作任何限定。
可见,实施图1所描述的基于Elasticsearch的数据查询方法,实现了直接编写SQL数据查询指令就能实现多维度聚合指标统计,进而得到基于Elasticsearch的数据查询结果,无需学习比较复杂的DSL查询语法,简化了查询语法,降低了业务开发人员的学习成本,进而有利于提升检索效率。
请参看图2,图2为本申请实施例提供的另一种基于Elasticsearch的数据查询方法的流程示意图。如图2所示,其中,该基于Elasticsearch的数据查询方法包括:
S201、获取用户输入的SQL数据查询指令。
本申请实施例中,SQL数据查询指令包括SQL查询语句和查询参数,其中,查询参数包括时间字段标识和度量值字段标识。
本申请实施例中,时间字段标识为用户指定的进行聚合统计时使用的时间字段名。
本申请实施例中,度量值字段标识为用户指定的需要进行统计计算的度量值字段名。
S202、对SQL查询语句进行解析处理,得到SQL查询语句中的统计函数。
作为一种可选的实施方式,可以使用druid SQL-Parser对SQL查询语句进行解析,获取用户在SQL查询语句中写的统计函数(如count(),sum()等等)。
作为一种可选的实施方式,对SQL查询语句进行解析处理,解析出select字段列表、group by字段列表等,进而可以获取用户在SQL查询语句中写的统计函数。
S203、根据统计函数和度量值字段标识,生成聚合统计函数。
作为一种可选的实施方式,根据统计函数和度量值字段标识,生成聚合统计函数,可以包括以下步骤:
根据度量值字段标识,获取度量值字段;
将度量值字段和统计函数进行组合,得到度量值字段的聚合统计函数。
在上述实施方式中,可以使用druid SQL-Parser将度量值字段和统计函数进行组合,得到度量值字段的聚合统计函数。
在上述实施方式中,聚合统计函数可以包括count()计数函数、sum()求和函数、avg()平均值计算函数等等,对此本申请实施例不作限定。
在步骤S203之后,还包括以下步骤:
S204、根据时间字段标识确定聚合统计时间。
作为一种可选的实施方式,根据时间字段标识确定聚合统计时间,可以包括以下步骤:
根据时间字段标识获取相应的时间字段;
根据时间字段确定查询开始时间和查询结束时间;
根据查询开始时间和查询结束时间计算聚合统计时间。
在上述实施方式中,对于指标时间趋势查询的需求,会根据查询开始时间和查询结束时间,计算出聚合统计时间bucket,比如聚合统计结果是每1分钟一个值点、每5分钟一个值点、每30分钟一个值点等等,最大不超过24小时。
本申请实施例中,实施上述步骤S202~步骤S204,能够根据SQL数据查询指令确定聚合统计参数。其中,聚合统计参数包括聚合统计函数和聚合统计时间。
在步骤S204之后,还包括以下步骤:
S205、将聚合统计函数添加至SQL查询语句中,得到初步查询语句;以及根据聚合统计时间和初步查询语句,生成综合查询语句。
本申请实施例中,实施上述步骤S205,能够根据聚合统计参数和SQL数据查询指令,生成综合查询语句。
S206、获取Elasticsearch的服务地址。
本申请实施例中,Elasticsearch的服务地址即Elasticsearch服务器的地址。
S207、根据服务地址创建服务调用对象。
本申请实施例中,服务调用对象包括OKHttpClient对象,可以采用基于Elasticsearch的SQL JDBC创建OKHttpClient对象。
本申请实施例中,JDBC(Java Database Connectivity,Java数据库连接),是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
S208、根据综合查询语句构建查询请求数据。
本申请实施例中,在创建OKHttpClient对象之后,再根据综合查询语句构建查询请求数据,查询请求数据包括http查询请求body等,对此本申请实施例不作限定。
S209、将查询请求数据配置到服务调用对象上,得到目标服务调用对象。
本申请实施例中,将查询请求数据配置到服务调用对象上,即将http查询请求body设置到OKHttpClient对象上,得到目标服务调用对象。其中,目标服务调用对象为设置好http查询请求body的OKHttpClient对象。
S210、根据目标服务调用对象在Elasticsearch中进行聚合统计查询,得到数据查询结果。
本申请实施例中,在根据目标服务调用对象在Elasticsearch中进行聚合统计查询时,则调用OKHttpClient对象的newCall方法完成对Elasticsearch的聚合统计查询,进而得到数据查询结果。
本申请实施例中,使用基于Elasticsearch的SQL JDBC的数据源连接池管理,来实现进行基于Elasticsearch的查询的过程,有利于降低查询的网络消耗,进而提升查询性能。
本申请实施例中,实施上述步骤S206~步骤S210,能够根据综合查询语句进行基于Elasticsearch的查询,得到数据查询结果。
本申请实施例中,实施上述步骤S206~步骤S210,通过引入基于Elasticsearch的SQL JDBC,在网络带宽相同,查询请求和响应数据也相同的情况下,提升了单次查询响应速度;同时,在查询请求并发量较多时,其响应速度远高于直接使用DSL语言进行查询的速度,在查询请求并发量达到100tps后,响应速度比直接使用DSL提升超过50%。
可见,实施图2所描述的基于Elasticsearch的数据查询方法,能够简化查询语法,进而有利于提升检索效率。
请参看图3,图3为本申请实施例提供的一种基于Elasticsearch的数据查询装置的结构示意图。如图3所示,该基于Elasticsearch的数据查询装置包括:
获取单元310,用于获取用户输入的SQL数据查询指令。
确定单元320,用于根据SQL数据查询指令确定聚合统计参数。
生成单元330,用于根据聚合统计参数和SQL数据查询指令,生成综合查询语句。
查询单元340,用于根据综合查询语句进行基于Elasticsearch的查询,得到数据查询结果。
可见,实施本实施例所描述的基于Elasticsearch的数据查询装置,能够简化查询语法,进而有利于提升检索效率。
请一并参阅图4,图4是本申请实施例提供的另一种基于Elasticsearch的数据查询装置的结构示意图。其中,图4所示的基于Elasticsearch的数据查询装置是由图3所示的基于Elasticsearch的数据查询装置进行优化得到的。如图4所示,确定单元320包括:
解析子单元321,用于对SQL查询语句进行解析处理,得到SQL查询语句中的统计函数。
函数生成子单元322,用于根据统计函数和度量值字段标识,生成聚合统计函数。
本申请实施例中,函数生成子单元322在生成聚合统计函数之后,还可以触发时间确定子单元323根据时间字段标识确定聚合统计时间。
时间确定子单元323,用于根据时间字段标识确定聚合统计时间。
本申请实施例中,SQL数据查询指令包括SQL查询语句和查询参数,其中,查询参数包括时间字段标识和度量值字段标识。
本申请实施例中,聚合统计参数包括聚合统计函数和聚合统计时间。
作为一种可选的实施方式,生成单元330包括:
添加子单元331,用于将聚合统计函数添加至SQL查询语句中,得到初步查询语句。
语句生成子单元332,用于根据聚合统计时间和初步查询语句,生成综合查询语句。
作为一种可选的实施方式,查询单元340包括:
获取子单元341,用于获取Elasticsearch的服务地址。
创建子单元342,用于根据服务地址创建服务调用对象。
构建子单元343,用于根据综合查询语句构建查询请求数据。
设置子单元344,用于将查询请求数据配置到服务调用对象上,得到目标服务调用对象。
查询子单元345,用于根据目标服务调用对象在Elasticsearch中进行聚合统计查询,得到数据查询结果。
可见,实施本实施例所描述的基于Elasticsearch的数据查询装置,能够简化查询语法,进而有利于提升检索效率。
本申请实施例提供了一种电子设备,包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述电子设备执行本申请实施例中的基于Elasticsearch的数据查询方法。
本申请实施例提供了一种计算机可读存储介质,其存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行本申请实施例中的基于Elasticsearch的数据查询方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
- 一种基于Elasticsearch的数据查询方法及装置
- 一种基于ElasticSearch的数据查询方法及装置