一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据搜索方法、装置、电子设备、介质及程序产品与流程

2022-06-01 02:40:15 来源:中国专利 TAG:


1.本公开涉及数据搜索技术领域,具体涉及一种数据搜索方法、装置、电子设备、介质及程序产品。


背景技术:

2.数据加工服务可用于数据的规整、富化、流转、脱敏和过滤。在数据加工作业中,搜索算子被极高频使用。经过统计发现,在数据加工所使用的算子中,搜索算子使用频度排在前五名。如何实现一种高效的数据搜索方法,针对数据加工服务的高频搜索需求及自动优化是一个亟需解决的问题。


技术实现要素:

3.为了解决相关技术中的问题,本公开实施例提供一种数据搜索方法、装置、电子设备、介质及程序产品。
4.第一方面,本公开实施例中提供了一种数据搜索方法,包括:
5.获取数据搜索请求;
6.通过对所述数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树;
7.对所述抽象语法树进行优化,得到优化抽象语法树,所述优化抽象语法树的语义与所述抽象语法树相同,所述优化抽象语法树的执行效率高于所述抽象语法树的执行效率;
8.将所述优化抽象语法树编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。
9.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
10.去除所述抽象语法树的节点对应的表达式中字符串前方和/或后方的通配符;和/或
11.将所述抽象语法树的节点对应的表达式中包含通配符的字符串转换为正则表达式。
12.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
13.根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置。
14.根据本公开的实施例,所述根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置,包括:
15.调整所述抽象语法树中节点的位置,使得与技术复杂度低的表达式相对应的节点先于与技术复杂度低的表达式相对应的节点被执行。
16.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
17.提取所述抽象语法树的节点对应的表达式中的公共字段;
18.改写包含所述公共字段的表达式,以减少所述抽象语法树的节点对应的表达式中所述公共字段的出现次数;
19.根据改写后的表达式修改所述抽象语法树。
20.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
21.标记所述抽象语法树中的复杂表达式,所述复杂表达式是元素数量超过预设阈值的表达式,所述标记用于在对所述优化抽象语法树进行编译时,将所述复杂表达式转换为执行效率更高的逻辑操作。
22.根据本公开的实施例,所述对所述抽象语法树进行优化,包括迭代执行对所述抽象语法树进行优化的操作。
23.第二方面,本公开实施例中提供了一种数据搜索装置,包括:
24.获取模块,被配置为获取数据搜索请求;
25.生成模块,被配置为通过对所述数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树;
26.优化模块,被配置为对所述抽象语法树进行优化,得到优化抽象语法树,所述优化抽象语法树的语义与所述抽象语法树相同,所述优化抽象语法树的执行效率高于所述抽象语法树的执行效率;
27.编译模块,被配置为将所述优化抽象语法树编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。
28.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
29.去除所述抽象语法树的节点对应的表达式中字符串前方和/或后方的通配符;和/或
30.将所述抽象语法树的节点对应的表达式中包含通配符的字符串转换为正则表达式。
31.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
32.根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置。
33.根据本公开的实施例,所述根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置,包括:
34.调整所述抽象语法树中节点的位置,使得与技术复杂度低的表达式相对应的节点先于与技术复杂度低的表达式相对应的节点被执行。
35.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
36.提取所述抽象语法树的节点对应的表达式中的公共字段;
37.改写包含所述公共字段的表达式,以减少所述抽象语法树的节点对应的表达式中所述公共字段的出现次数;
38.根据改写后的表达式修改所述抽象语法树。
39.根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
40.标记所述抽象语法树中的复杂表达式,所述复杂表达式是元素数量超过预设阈值的表达式,所述标记用于在对所述优化抽象语法树进行编译时,将所述复杂表达式转换为执行效率更高的逻辑操作。
41.根据本公开的实施例,所述对所述抽象语法树进行优化,包括迭代执行对所述抽象语法树进行优化的操作。
42.第三方面,本公开实施例提供了一种电子设备,包括存储器和处理器,其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如第一方面中任一项所述的方法。
43.第四方面,本公开实施例中提供了一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如第一方面中任一项所述的方法。
44.第五方面,本公开实施例中提供了一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现如第一方面中任一项所述的方法步骤。
45.根据本公开实施例提供的技术方案,获取数据搜索请求,通过对数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树,对抽象语法树进行优化,采用语义等价转换的方式构建优化的运行时数据结构,对优化抽象语法树进行编译得到执行效率更高的计算机程序代码,同时避免了针对每条数据记录执行搜索请求都重复对抽象语法树进行解析,减少了搜索对系统资源的消耗,提高了搜索效率,提高了单位时间处理的数据量,有效解决了海量数据的实时处理需求。
46.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
47.结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
48.图1示出根据本公开的实施例的数据搜索方法的流程图。
49.图2示出了根据本公开实施例的ast示例。
50.图3示出根据本公开实施例的数据搜索方法的流程图。
51.图4示出根据本公开的实施例的数据搜索装置的结构框图。
52.图5示出根据本公开的实施例的电子设备的结构框图。
53.图6示出适于用来实现根据本公开实施例的方法的计算机系统的结构示意图。
具体实施方式
54.下文中,将参考附图详细描述本公开的示例性实施例,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施例无关的部分。
55.在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
56.另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
57.在本公开中,对用户信息或用户数据的获取均为经用户授权、确认,或由用户主动选择的操作。
58.如上所述,数据加工服务可用于数据的规整、富化、流转、脱敏和过滤。在数据加工
作业中,搜索算子被极高频使用。经过统计发现,在数据加工所使用的算子中,搜索算子使用频度排在前五名。如何实现一种高效的数据搜索方法,针对数据加工服务的高频搜索需求及自动优化是一个亟需解决的问题。
59.dsl(特定领域语言,domain-specific language)无需使用者编写较为复杂的通用计算机语言(general purpose language,gpl)程序,通过简洁的dsl即可实现复杂的操作,具有较好的用户体验。一种使用dsl实现数据搜索的可能方案是,在执行搜索时,首先获取用dsl编写的搜索请求,根据搜索请求生成ast(抽象语法树,abstract syntax tree),然后,对ast进行遍历解析,根据当前的标识符类型执行对应操作。
60.上述方案称为“解析执行”方案,由于针对每条数据记录执行搜索请求都需要对ast进行遍历解析,在针对海量数据进行搜索时的执行效率很低。
61.本公开提供了一种数据搜索方法,包括:获取数据搜索请求;通过对所述数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树;对所述抽象语法树进行优化,得到优化抽象语法树,所述优化抽象语法树的语义与所述抽象语法树相同,所述优化抽象语法树的执行效率高于所述抽象语法树的执行效率;将所述优化抽象语法树编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。
62.根据本公开的实施例,获取数据搜索请求,通过对数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树,对抽象语法树进行优化,采用语义等价转换的方式构建优化的运行时数据结构,对优化抽象语法树进行编译得到执行效率更高的计算机程序代码,同时避免了针对每条数据记录执行搜索请求都重复对抽象语法树进行解析,减少了搜索对系统资源的消耗,提高了搜索效率,提高了单位时间处理的数据量,有效解决了海量数据的实时处理需求。
63.图1示出根据本公开的实施例的数据搜索方法的流程图。如图1所示,所述数据搜索方法包括以下步骤s101-s104:
64.在步骤s101中,获取数据搜索请求;
65.在步骤s102中,通过对所述数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树;
66.在步骤s103中,对所述抽象语法树进行优化,得到优化抽象语法树,所述优化抽象语法树的语义与所述抽象语法树相同,所述优化抽象语法树的执行效率高于所述抽象语法树的执行效率;
67.在步骤s104中,将所述优化抽象语法树编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。
68.根据本公开的实施例,在步骤s101中获取的数据搜索请求可以是使用dsl编写的搜索语句。dsl指的是专注于某个应用程序领域的计算机语言。不同于普通的跨领域gpl,dsl只用在某些特定的领域,比如用于编写网页的html,或用于搜索数据库的sql等。
69.根据本公开实施例的dsl可以针对搜索需求而定制,用于实现指定搜索功能。根据本公开的实施例,所述指定搜索功能例如包括全文搜索、字段搜索、完全匹配搜索、正则匹配搜索、通配符搜索、数字搜索、关系运算符搜索等搜索功能中的任意一项或多项。
70.下文示出了上述搜索功能对应的dsl搜索语句示例。
71.1.全文搜索,语法格式为“字符串”,如果字符串中间存在空格,则表示字符串是或
逻辑关系。例如:e_search("active error"),用于在全文中搜索字符串active和error,如果全文中包含字符串active或包含字符串error,则搜索结果为命中。
72.2.字段搜索,语法格式为“字段:字符串”,同时字符串中间存在空格,则表示字符串是或逻辑关系。例如:e_search("status:active"),用于在字段status中搜索字符串active。
73.3.完全匹配,语法格式为“字段=="字符串"”。例如:e_search('author=="john smith"'),用于搜索值等于john smith的字段author。
74.4.正则匹配,语法格式为“字段~=字符串”。例如:e_search('content~="正则表达式"'),用于搜索与正则表达式匹配的字段content。
75.5.通配符搜索,星号(*)匹配零个或多个字符,问号(?)匹配一个字符。例如:e_search("status:active*test"),用于在字段status中搜索包含通配符的字符串active*test。
76.6.数字搜索,支持数字大小和范围的搜索匹配。例如:e_search('count:[100,200]'),e_search('age》=18'),分别用于在字段count中搜索数值在[100,200]区间内的记录和用于在字段age中搜索数值大于18的记录。
[0077]
7.使用关系运算符,支持not、and和or操作。例如:e_search("abc or xyz")用于在全文中搜索字符串abc和xyz,如果全文中包含字符串abc或包含字符串xyz,则搜索结果为命中。又例如,e_search("xyz and not zzz"),如果全文中包含字符串xyz并且不包含字符串zzz,则搜索结果为命中。
[0078]
另外,根据本公开实施例的dsl搜索语句还可以实现搜索值转义和字段名转义等操作。在搜索值转义中,星号(*)或问号(?)需要使用反斜线(\)转义,例如:e_search('status:"\*\?()[]:="')。在字段名转义中,特殊字符用反斜线(\)转义,例如:e_search("__tag__\:__container_name__:abc")。
[0079]
根据本公开的实施例,在步骤s102中,在获取数据搜索请求后,通过对所述数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树。例如,可以采用语法生成器,例如antlr4,对数据搜索请求进行解析并改写为语义一致的ast。ast是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
[0080]
图2示出了根据本公开实施例的ast示例。如图2所示,ast节点包括运算符“ ”、“*”,还包括参与运算的数值100、2、400、1,该ast对应于表达式“(100*2) (400*1) 66”。
[0081]
然后,使用antlr4的监听器模式访问ast节点,在exist方法中转换构造语义更加完备的ast,例如将二目逻辑运算符or转换为多目逻辑运算符or等。
[0082]
根据本公开的实施例,在步骤s103中,对所述抽象语法树进行优化,得到优化抽象语法树,所述优化抽象语法树的语义与所述抽象语法树相同,所述优化抽象语法树的执行效率高于所述抽象语法树的执行效率。
[0083]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:去除所述抽象语法树的节点对应的表达式中字符串前方和/或后方的通配符;和/或将所述抽象语法树的节点对应的表达式中包含通配符的字符串转换为正则表达式。通过将字符串前方和/或后方的通配符去除,将包含通配符的字符串转换为正则表达式,可以消除较为常见的dsl编写手
误。
[0084]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置。所述根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置,包括:调整所述抽象语法树中节点的位置,使得与技术复杂度低的表达式相对应的节点先于与技术复杂度低的表达式相对应的节点被执行。
[0085]
不同表达式的计算复杂度是不同的,算术运算相等比较运行较快,子串搜索次之,正则匹配计算复杂度较高,因此,在保证优化抽象语法树的语义与所述抽象语法树相同的前提下,将算术运算相等比较尽可能前置,正则匹配尽可能后置,能够得到较好的执行效果。根据本公开的实施例,可以预先设置对各种节点的顺序进行调整时的ast改写方式,根据在进行节点位置调整时,按照相应的改写方式对ast进行改写。
[0086]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:提取所述抽象语法树的节点对应的表达式中的公共字段;改写包含所述公共字段的表达式,以减少所述抽象语法树的节点对应的表达式中所述公共字段的出现次数;根据改写后的表达式修改所述抽象语法树。
[0087]
由于不同用户编写dsl的习惯不同,有些搜索表达式中充斥着大量的重复字段,比如对某个字段的重复子串或运算。如果将这个公共字段提取,则对这个公共字段的操作不需要被重复执行。例如,表达式“student_name:wang student_name:li student_name:sun”中重复出现公共字段student_name,则可以提取该公共字段,将表达式改写为“student_name:(wang li sun)”,以减小计算复杂度。
[0088]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:标记所述抽象语法树中的复杂表达式,所述复杂表达式是元素数量超过预设阈值的表达式,所述标记用于在对所述优化抽象语法树进行编译时,将所述复杂表达式转换为执行效率更高的逻辑操作。
[0089]
当复杂表达式元素超过预设阈值时,可以在语义等价的前提下转换为高效的运行时数据结构。例如,大量的算术运算相等比较可以转换为集合in操作,大量的子串搜索可以转换为ac自动机,大量的正则表达式匹配可以合并为一条正则表达式匹配。
[0090]
根据本公开的实施例,针对不同的复杂表达式可以赋予不同标记,例如对大量的算术运算相等比较赋予标记a,对大量的子串搜索赋予标记b,对大量的正则表达式匹配赋予标记c。在将ast编译为计算机程序代码时,对标记a对应的复杂表达式,转换成相应的集合in操作的计算机程序代码,对标记b对应的复杂表达式,转换成相应的ac自动机的计算机程序代码,对标记c对应的复杂表达式,转换成相应的一条正则表达式的计算机程序代码。
[0091]
根据本公开实施例,由于语义等价优化会改变原ast的结构,进而可能又会产生新的优化点,因此,可以迭代执行对所述抽象语法树进行优化的操作,即对优化ast重复执行上述优化操作。
[0092]
根据本公开的实施例,在步骤s104中,将所述优化抽象语法树编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。例如,在该步骤中,将ast转换为可以执行的运行时c 代码。此步骤可以为ast和c 类结构的一对一翻译,采用拼接字符串的方式翻译为c 类,然后将翻译之后的运行时代码打包既可以运行。
[0093]
在生成计算机程序代码之后,可以运行所述计算机程序代码,以执行所述数据搜
索请求。
[0094]
图3示出根据本公开实施例的数据搜索方法的流程图。
[0095]
如图3所示,在步骤s1,获取数据搜索请求,所述数据搜索请求是dsl编写的搜索语句。
[0096]
然后,在步骤s2,将dsl搜索语句解析为ast,例如,可以采用语法生成器,例如antlr4,对数据搜索请求进行解析并改写为语义一致的ast。
[0097]
在步骤s3,在生成ast之后,使用antlr4的监听器模式访问ast节点,在exist方法中转换构造语义更加完备的ast,例如将二目逻辑运算符or转换为多目逻辑运算符or等。
[0098]
在步骤s4,将ast优化计数count初始化为0。
[0099]
在步骤s5,如果ast优化计数count小于预设计数值(本实施例中设置为2),执行步骤s6~s9,进行ast优化。
[0100]
首先,在步骤s6,对ast进行通配符处理,包括:去除所述抽象语法树的节点对应的表达式中字符串前方和/或后方的通配符;和/或将所述抽象语法树的节点对应的表达式中包含通配符的字符串转换为正则表达式。通过将字符串前方和/或后方的通配符去除,将包含通配符的字符串转换为正则表达式,可以消除较为常见的dsl编写手误。
[0101]
其次,在步骤s7,对ast进行表达式优先级排序处理,包括根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置。所述根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置,包括:调整所述抽象语法树中节点的位置,使得与技术复杂度低的表达式相对应的节点先于与技术复杂度低的表达式相对应的节点被执行。
[0102]
不同表达式的计算复杂度是不同的,算术运算相等比较运行较快,子串搜索次之,正则匹配计算复杂度较高,因此,在保证优化抽象语法树的语义与所述抽象语法树相同的前提下,将算术运算相等比较尽可能前置,正则匹配尽可能后置,能够得到较好的执行效果。根据本公开的实施例,可以预先设置对各种节点的顺序进行调整时的ast改写方式,根据在进行节点位置调整时,按照相应的改写方式对ast进行改写。
[0103]
然后,在步骤s8,对ast进行公共字段提取处理,包括:提取所述抽象语法树的节点对应的表达式中的公共字段;改写包含所述公共字段的表达式,以减少所述抽象语法树的节点对应的表达式中所述公共字段的出现次数;根据改写后的表达式修改所述抽象语法树。
[0104]
由于不同用户编写dsl的习惯不同,有些搜索表达式中充斥着大量的重复字段,比如对某个字段的重复子串或运算。如果将这个公共字段提取,则对这个公共字段的操作不需要被重复执行。例如,表达式“student_name:wang student_name:li student_name:sun”中重复出现公共字段student_name,则可以提取该公共字段,将表达式改写为“student_name:(wang li sun)”,以减小计算复杂度。
[0105]
接下来,在步骤s9,对ast进行复杂逻辑表达式处理,包括:标记所述抽象语法树中的复杂表达式,所述复杂表达式是元素数量超过预设阈值的表达式,所述标记用于在对所述优化抽象语法树进行编译时,将所述复杂表达式转换为执行效率更高的逻辑操作。
[0106]
对于元素数量超过预设阈值的复杂表达式,可以在语义等价的前提下转换为高效的运行时数据结构。例如,大量的算术运算相等比较可以转换为集合in操作,大量的子串搜
索可以转换为ac自动机,大量的正则表达式匹配可以合并为一条正则表达式匹配。
[0107]
根据本公开的实施例,针对不同的复杂表达式可以赋予不同标记,例如对大量的算术运算相等比较赋予标记a,对大量的子串搜索赋予标记b,对大量的正则表达式匹配赋予标记c。在将ast编译为计算机程序代码时,对标记a对应的复杂表达式,转换成相应的集合in操作的计算机程序代码,对标记b对应的复杂表达式,转换成相应的ac自动机的计算机程序代码,对标记c对应的复杂表达式,转换成相应的一条正则表达式的计算机程序代码。
[0108]
根据本公开实施例,由于语义等价优化会改变原ast的结构,进而可能又会产生新的优化点,因此,可以迭代执行对所述抽象语法树进行优化的操作,即对优化ast重复执行上述优化操作。具体地,在步骤s10,将ast优化计数count加1,返回步骤s5,判断ast优化计数count是否小于2。如果是,则重复步骤s6~s9,对ast进行迭代优化,否则进行到步骤s11,将ast转换为计算机程序代码。
[0109]
在步骤s11,将所述ast编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。例如,在该步骤中,将ast转换为可以执行的运行时c 代码。此步骤可以为ast和c 类结构的一对一翻译,采用拼接字符串的方式翻译为c 类,然后将翻译之后的运行时代码打包既可以运行。
[0110]
根据本公开的实施例提供的数据搜索方法,“全文搜索”、“字段搜索”和“完全匹配”等操作会有5 倍的性能提升,“字段正则匹配”会有2倍的性能提升,高效ac自动机极限情况会有1000 倍的性能提升。本公开的实施例提供的数据搜索方法加快了数据处理速度,缩短了处理延时,优化了事件吞吐率和实时性,有效降低了数据加工作业出现延时的概率,减少了服务器使用数量,节省了运营成本。
[0111]
图4示出根据本公开的实施例的数据搜索装置的结构框图。其中,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。
[0112]
如图4所示,所述数据搜索装置400包括获取模块410、生成模块420、优化模块430、编译模块440。
[0113]
获取模块410被配置为获取数据搜索请求;
[0114]
生成模块420被配置为通过对所述数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树;
[0115]
优化模块430被配置为对所述抽象语法树进行优化,得到优化抽象语法树,所述优化抽象语法树的语义与所述抽象语法树相同,所述优化抽象语法树的执行效率高于所述抽象语法树的执行效率;
[0116]
编译模块440被配置为将所述优化抽象语法树编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。
[0117]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0118]
去除所述抽象语法树的节点对应的表达式中字符串前方和/或后方的通配符;和/或
[0119]
将所述抽象语法树的节点对应的表达式中包含通配符的字符串转换为正则表达式。
[0120]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0121]
根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽
象语法树中的位置。
[0122]
根据本公开的实施例,所述根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置,包括:
[0123]
调整所述抽象语法树中节点的位置,使得与技术复杂度低的表达式相对应的节点先于与技术复杂度低的表达式相对应的节点被执行。
[0124]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0125]
提取所述抽象语法树的节点对应的表达式中的公共字段;
[0126]
改写包含所述公共字段的表达式,以减少所述抽象语法树的节点对应的表达式中所述公共字段的出现次数;
[0127]
根据改写后的表达式修改所述抽象语法树。
[0128]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0129]
标记所述抽象语法树中的复杂表达式,所述复杂表达式是元素数量超过预设阈值的表达式,所述标记用于在对所述优化抽象语法树进行编译时,将所述复杂表达式转换为执行效率更高的逻辑操作。
[0130]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括迭代执行对所述抽象语法树进行优化的操作。
[0131]
本公开还公开了一种电子设备,图5示出根据本公开的实施例的电子设备的结构框图。
[0132]
如图5所示,所述电子设备500包括存储器501和处理器502,其中,存储器501用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器502执行以实现根据本公开的实施例的方法。
[0133]
本公开提供了一种数据搜索方法,包括:
[0134]
获取数据搜索请求;
[0135]
通过对所述数据搜索请求进行语义解析,生成与所述数据搜索请求对应的抽象语法树;
[0136]
对所述抽象语法树进行优化,得到优化抽象语法树,所述优化抽象语法树的语义与所述抽象语法树相同,所述优化抽象语法树的执行效率高于所述抽象语法树的执行效率;
[0137]
将所述优化抽象语法树编译为计算机程序代码,所述计算机程序代码用于执行所述数据搜索请求。
[0138]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0139]
去除所述抽象语法树的节点对应的表达式中字符串前方和/或后方的通配符;和/或
[0140]
将所述抽象语法树的节点对应的表达式中包含通配符的字符串转换为正则表达式。
[0141]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0142]
根据所述抽象语法树的节点对应的表达式的计算复杂度,调整所述节点在所述抽象语法树中的位置。
[0143]
根据本公开的实施例,所述根据所述抽象语法树的节点对应的表达式的计算复杂
度,调整所述节点在所述抽象语法树中的位置,包括:
[0144]
调整所述抽象语法树中节点的位置,使得与技术复杂度低的表达式相对应的节点先于与技术复杂度低的表达式相对应的节点被执行。
[0145]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0146]
提取所述抽象语法树的节点对应的表达式中的公共字段;
[0147]
改写包含所述公共字段的表达式,以减少所述抽象语法树的节点对应的表达式中所述公共字段的出现次数;
[0148]
根据改写后的表达式修改所述抽象语法树。
[0149]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括:
[0150]
标记所述抽象语法树中的复杂表达式,所述复杂表达式是元素数量超过预设阈值的表达式,所述标记用于在对所述优化抽象语法树进行编译时,将所述复杂表达式转换为执行效率更高的逻辑操作。
[0151]
根据本公开的实施例,所述对所述抽象语法树进行优化,包括迭代执行对所述抽象语法树进行优化的操作。
[0152]
图6示出适于用来实现根据本公开实施例的方法的计算机系统的结构示意图。
[0153]
如图6所示,计算机系统600包括处理单元601,其可以根据存储在只读存储器(rom)602中的程序或者从存储部分608加载到随机访问存储器(ram)603中的程序而执行上述实施例中的各种处理。在ram 603中,还存储有系统600操作所需的各种程序和数据。处理单元601、rom 602以及ram 603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。
[0154]
以下部件连接至i/o接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至i/o接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。其中,所述处理单元601可实现为cpu、gpu、tpu、fpga、npu等处理单元。
[0155]
特别地,根据本公开的实施例,上文描述的方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括计算机指令,该计算机指令被处理器执行时实现上文所述的方法步骤。在这样的实施例中,该计算机程序产品可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
[0156]
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令
的组合来实现。
[0157]
描述于本公开实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过可编程硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
[0158]
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中电子设备或计算机系统中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
[0159]
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献