DSL的构建方法、系统、电子设备和介质技术方案

技术编号:24251654 阅读:31 留言:0更新日期:2020-05-22 23:37
本发明专利技术公开了一种DSL的构建方法、系统、电子设备和介质,其中DSL的构建方法包括以下步骤:将目标算术表达式转换为目标Token集合;遍历目标Token集合以转换成逆波兰式;遍历逆波兰式以构建操作数栈,从操作数栈中弹出第一个操作数作为目标DSL。本发明专利技术降低了DSL构建的复杂度。

Construction method, system, electronic equipment and media of DSL

【技术实现步骤摘要】
DSL的构建方法、系统、电子设备和介质
本专利技术属于DSL的构建
,尤其涉及一种DSL的构建方法、系统、电子设备和介质。
技术介绍
Elasticsearch(一种搜索服务器)作为开源分布式搜索引擎之一,在各种规模的互联网企业都有着不同规模的集群部署,所以它有着非常活跃的社区,对它的使用与挖掘一刻也没有停止过。Elasticsearch具有特殊的QueryDSL(查询表达式)。由于Elasticsearch和传统关系型数据库的本质差异,Elasticsearch-SQL(一种数据库)支持到的功能很有限,只能做简单的逻辑查询,不支持join(一种数据类型)类型,并且Elasticsearch-SQL是X-Pack(一种插件)插件,增加了部署的复杂度。
技术实现思路
本专利技术要解决的技术问题是为了克服现有技术中的DSL构建的复杂度加高的缺陷,提供一种DSL的构建方法、系统、电子设备和介质。本专利技术是通过下述技术方案来解决上述技术问题:本专利技术提供一种DSL的构建方法,包括以下步骤:将目标算术表达式转换为目标Token(合法元素)集合;遍历目标Token集合以转换成逆波兰式;遍历逆波兰式以构建操作数栈,从操作数栈中弹出第一个操作数作为目标DSL。较佳地,遍历目标Token集合以转换成逆波兰式的步骤包括:识别目标Token集合中的不同类型的目标Token,将目标Token包装成Function(函数)、Parameter(参数)、Operator(操作数)对象。较佳地,遍历逆波兰式以构建操作数栈的步骤包括:判断是否为子查询,如果是子查询,则根据逻辑表达式的分配律、结合律、交换律、反演律将逆波兰式转换为最小项和的形式,对每个最小项按照父子文档属性进行交换排序,并构建子查询DSL以生成目标DSL;如果不是子查询,则对每个Operator对象构建目标DSL。较佳地,目标DSL为ElasticsearchQueryDSL。本专利技术还提供一种DSL的构建系统,包括词法分析器、逆波兰式转换器、语法构建器;词法分析器用于将目标算术表达式转换为目标Token集合;逆波兰式转换器用于遍历目标Token集合以转换成逆波兰式;语法构建器用于遍历逆波兰式以构建操作数栈,并用于从操作数栈中弹出第一个操作数作为目标DSL。较佳地,逆波兰式转换器还用于识别目标Token集合中的不同类型的目标Token,将目标Token包装成Function、Parameter、Operator对象。较佳地,语法构建器还用于判断是否为子查询,如果是子查询,则根据逻辑表达式的分配律、结合律、交换律、反演律将逆波兰式转换为最小项和的形式,对每个最小项按照父子文档属性进行交换排序,并构建子查询DSL以生成目标DSL;如果不是子查询,则对每个Operator对象构建目标DSL。较佳地,目标DSL为ElasticsearchQueryDSL。本专利技术还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现本专利技术的DSL的构建方法。本专利技术还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现本专利技术的DSL的构建方法的步骤。本专利技术的积极进步效果在于:本专利技术降低了DSL构建的复杂度。附图说明图1为本专利技术的实施例1的DSL的构建方法的流程图。图2为本专利技术的实施例1的DSL的构建系统的结构示意图。图3为本专利技术的实施例3的电子设备的结构示意图。具体实施方式下面通过实施例的方式进一步说明本专利技术,但并不因此将本专利技术限制在所述的实施例范围之中。实施例1本实施例提供一种DSL的构建方法。参照图1,该DSL的构建方法包括以下步骤:步骤S101、将目标算术表达式转换为目标Token集合。步骤S102、遍历目标Token集合以转换成逆波兰式。步骤S103、遍历逆波兰式以构建操作数栈,从操作数栈中弹出第一个操作数作为目标DSL。在步骤S101中,对算术逻辑表达式(一般而言是一个字符串)进行解析,将算术逻辑表达式分割成一个Token的集合。在步骤S102中,识别目标Token集合中的不同类型的目标Token,将目标Token包装成Function、Parameter、Operator对象。期间将Function通过FunctionCalculator计算成动态的Parameter。通过逆波兰式的转换,去除了算术逻辑表达式中的优先级关系,方便进行DSL的构建。在步骤S103中,判断是否为子查询,如果是子查询,则根据逻辑表达式的分配律、结合律、交换律、反演律将逆波兰式转换为最小项和的形式,对每个最小项按照父子文档属性进行交换排序,并构建子查询DSL以生成目标DSL;如果不是子查询,则对每个Operator对象构建目标DSL。作为一种可选的实施方式,目标DSL为ElasticsearchQueryDSL。本实施例的DSL的构建方法简化了ElasticSearchQueryDSL的构建,在绝大多数情况只需给定,例如:!(field1==x||field2==y)&&field3>z的算术逻辑表达式即可完成DSL的构建,避免了开发人员硬编码构建DSL,减少了开发量,提高了开发效率。另一方面,也方便业务运营等非技术人员可以使用算术逻辑表达式来查询想要的数据,避免经过开发、运维等技术人员,提高了工作效率。实施例2本实施例提供一种DSL的构建系统。参照图2,该DSL的构建系统包括词法分析器(Lexer)201、逆波兰式转换器(ReservePolandParser)202、语法构建器(Builder)203。词法分析器201用于将目标算术表达式转换为目标Token集合。逆波兰式转换器202用于遍历目标Token集合以转换成逆波兰式。语法构建器203用于遍历逆波兰式以构建操作数栈,并用于从操作数栈中弹出第一个操作数作为目标DSL。具体实施时,词法分析器201对算术逻辑表达式(一般而言是一个字符串)进行解析,将算术逻辑表达式分割成一个Token的集合。逆波兰式转换器202识别目标Token集合中的不同类型的目标Token,将目标Token包装成Function、Parameter、Operator对象。期间将Function通过FunctionCalculator计算成动态的Parameter。通过逆波兰式的转换,去除了算术逻辑表达式中的优先级关系,方便进行DSL的构建。语法构建器203判断是否为子查询,如果是子查询,则根据逻辑表达式的分配律、结合律、交换律、反演律将逆波兰式转换为最小项和的形式,对每个最小项按照父子文档属性进行交换排序,并构建子查询DSL以生成目标DSL;如果本文档来自技高网...

【技术保护点】
1.一种DSL的构建方法,其特征在于,包括以下步骤:/n将目标算术表达式转换为目标Token集合;/n遍历所述目标Token集合以转换成逆波兰式;/n遍历所述逆波兰式以构建操作数栈,从所述操作数栈中弹出第一个操作数作为目标DSL。/n

【技术特征摘要】
1.一种DSL的构建方法,其特征在于,包括以下步骤:
将目标算术表达式转换为目标Token集合;
遍历所述目标Token集合以转换成逆波兰式;
遍历所述逆波兰式以构建操作数栈,从所述操作数栈中弹出第一个操作数作为目标DSL。


2.如权利要求1所述的DSL的构建方法,其特征在于,所述遍历所述目标Token集合以转换成逆波兰式的步骤包括:
识别所述目标Token集合中的不同类型的目标Token,将所述目标Token包装成Function、Parameter、Operator对象。


3.如权利要求2所述的DSL的构建方法,其特征在于,所述遍历所述逆波兰式以构建操作数栈的步骤包括:
判断是否为子查询,如果是子查询,则根据逻辑表达式的分配律、结合律、交换律、反演律将所述逆波兰式转换为最小项和的形式,对每个最小项按照父子文档属性进行交换排序,并构建子查询DSL以生成所述目标DSL;如果不是子查询,则对每个所述Operator对象构建所述目标DSL。


4.如权利要求1所述的DSL的构建方法,其特征在于,所述目标DSL为ElasticsearchQueryDSL。


5.一种DSL的构建系统,其特征在于,包括词法分析器、逆波兰式转换器、语法构建器;
所述词法分析器用于将目标算术表达式转换为目标Token集合;
所述逆波兰式转换器用于遍...

【专利技术属性】
技术研发人员:郑成孔令梁戴军强许世童
申请(专利权)人:上海携程商务有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1