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

信息查询方法、装置以及存储介质与流程

2021-10-23 00:17:00 来源:中国专利 TAG:信息查询 装置 计算机 方法 存储介质


1.本发明涉及计算机技术领域,尤其涉及一种信息查询方法、装置以及存储介质。


背景技术:

2.对于数据检索可以使用es搜索方案,es的实时性能好,能够满足分布式实时搜索的要求。在某些场景下,在进行es搜索时,需要同时过滤多个映射(mapping)类型不同的索引(index),并将它们的结果通过隐式的关系进行合并、去重,然后导入到文件中去,为业务应用提供分析使用。目前,es可以使用多索引查询、嵌套查询、父子查询等来支持一些简单的关联查询,但是不支持不同集群下索引的关联查询,并且在使用多索引查询时,过滤条件必须同时符合多个索引。因此,需要一种新的信息查询技术方案。


技术实现要素:

3.有鉴于此,本发明要解决的一个技术问题是提供一种信息查询方法、装置以及存储介质。
4.根据本公开的一个方面,提供一种信息查询方法,包括:对接收到的查询请求信息进行转换处理,生成具有层级嵌套结构的逻辑查询信息;其中,所述逻辑查询信息包括:dsl查询语句;根据所述层级嵌套结构将所述逻辑查询信息分解为至少一个物理查询信息,并根据所述逻辑查询信息获取查询结果合并策略;基于所述物理查询信息在对应的集群或物理索引中执行查询操作,获取查询结果;其中,所述集群包括:es集群;根据所述查询结果合并策略对所述查询结果进行合并处理,生成与所述查询请求信息相对应的结果信息。
5.可选地,所述查询请求信息包括:json格式查询语句;所述对接收到的查询请求信息进行转换处理,生成具有层级嵌套结构的逻辑查询信息包括:对所述json格式查询语句进行解析处理,获取所述json格式查询语句中的元素-值对以及所述元素-值对之间的逻辑关系;根据所述元素-值对以及所述逻辑关系生成es系统的查询构建对象;基于所述查询构建对象生成所述逻辑查询信息;其中,所述逻辑关系包括:与、或和非逻辑关系中的一种或多种。
6.可选地,所述逻辑查询信息的第一嵌套层级包括布尔查询构建对象、第二嵌套层级包括灵活别名布尔查询构建对象;位于第一嵌套层级的布尔查询构建对象用于进行逻辑查询,包含至少一个位于第二嵌套层级的灵活别名布尔查询构建对象,以及与所述至少一个所述灵活别名布尔查询构建对象相对应的所述查询结果合并策略;其中,所述查询结果合并策略包括:交集、并集和差集;所述灵活别名布尔查询构建对象包含有与所述es集群相对应的逻辑索引信息以及进行数据过滤的查询构建对象,用于进行物理查询;其中,所述进行数据过滤的查询构建对象包括:等值查询构建对象、范围查询构建对象和、in查询构建对象、布尔查询构建对象中的一种或多种。
7.可选地,在生成所述逻辑查询信息后,基于预设的修订规则对所述灵活别名布尔查询构建对象进行修订处理;其中,所述修订处理规则包括:为所述灵活别名布尔查询构建
对象增加数据归属过滤字段、基于所述逻辑索引信息对所述灵活别名布尔查询构建对象进行合并处理。
8.可选地,所述根据所述层级嵌套结构将所述逻辑查询信息分解为至少一个物理查询信息包括:获取位于第一嵌套层级的布尔查询构建对象所包含的全部灵活别名布尔查询构建对象;对所述逻辑查询信息进行分解处理,分别生成与所述全部灵活别名布尔查询构建对象相对应的物理查询信息;其中,所述物理查询信息包括:所述逻辑索引信息和所述进行数据过滤的查询构建对象。
9.可选地,所述基于所述物理查询信息在对应的集群或物理索引中执行查询操作,获取查询结果包括:为各个所述物理查询信息都配置一个执行线程,所述执行线程用于基于所述逻辑索引信息将所述物理查询信息发送到对应的es集群,执行所述查询执行语句并将所述查询结果存储在目标文件中。
10.可选地,基于所述查询结果合并策略判断需要对多个所述物理查询信息的查询结果进行交集处理,如果确定多个所述物理查询信息中的至少一个物理查询信息的查询结果为空,则停止对于多个所述物理查询信息中的其他物理查询信息所进行的查询处理。
11.可选地,所述根据所述查询结果合并策略对所述查询结果进行合并处理,生成与所述查询请求信息相对应的结果信息包括:基于预设的内存估算算法计算对所述查询结果进行合并处理的内存需求量,根据所述内存需求量进行内存分配;对所述目标文件中的数据进行排序和排重处理;将经过所述排序和排重处理后的目标文件进行文件合并处理;其中,所述文件合并处理包括:文件交集、并集和差集处理。
12.根据本公开的另一方面,提供一种信息查询装置,包括:查询解析处理模块,用于对接收到的查询请求信息进行转换处理,生成具有层级嵌套结构的逻辑查询信息;其中,所述逻辑查询信息包括:dsl查询语句;物理查询获取模块,用于根据所述层级嵌套结构将所述逻辑查询信息分解为至少一个物理查询信息,并根据所述逻辑查询信息获取查询结果合并策略;物理查询执行模块,用于基于所述物理查询信息在对应的集群或物理索引中执行查询操作,获取查询结果;其中,所述集群包括:es集群;查询结果合并模块,用于根据所述查询结果合并策略对所述查询结果进行合并处理,生成与所述查询请求信息相对应的结果信息。
13.可选地,所述查询请求信息包括:json格式查询语句;所述查询解析处理模块,包括:解析单元,用于对所述json格式查询语句进行解析处理,获取所述json格式查询语句中的元素-值对以及所述元素-值对之间的逻辑关系;构建单元,用于根据所述元素-值对以及所述逻辑关系生成es系统的查询构建对象;基于所述查询构建对象生成所述逻辑查询信息;其中,所述逻辑关系包括:与、或和非逻辑关系中的一种或多种。
14.可选地,所述逻辑查询信息的第一嵌套层级包括布尔查询构建对象、第二嵌套层级包括灵活别名布尔查询构建对象;位于第一嵌套层级的布尔查询构建对象用于进行逻辑查询,包含至少一个位于第二嵌套层级的灵活别名布尔查询构建对象,以及与所述至少一个所述灵活别名布尔查询构建对象相对应的所述查询结果合并策略;其中,所述查询结果合并策略包括:交集、并集和差集;所述灵活别名布尔查询构建对象包含有与所述es集群相对应的逻辑索引信息以及进行数据过滤的查询构建对象,用于进行物理查询;其中,所述进行数据过滤的查询构建对象包括:等值查询构建对象、范围查询构建对象和、in查询构建对
象、布尔查询构建对象中的一种或多种。
15.可选地,查询信息修订模块,用于在生成所述逻辑查询信息后,基于预设的修订规则对所述灵活别名布尔查询构建对象进行修订处理;其中,所述修订处理规则包括:为所述灵活别名布尔查询构建对象增加数据归属过滤字段、基于所述逻辑索引信息对所述灵活别名布尔查询构建对象进行合并处理。
16.可选地,所述物理查询获取模块,用于获取位于第一嵌套层级的布尔查询构建对象所包含的全部灵活别名布尔查询构建对象,对所述逻辑查询信息进行分解处理,分别生成与所述全部灵活别名布尔查询构建对象相对应的物理查询信息;其中,所述物理查询信息包括:所述逻辑索引信息和所述进行数据过滤的查询构建对象。
17.可选地,所述物理查询执行模块,包括:查询处理单元,用于为各个所述物理查询信息都配置一个执行线程,所述执行线程用于基于所述逻辑索引信息将所述物理查询信息发送到对应的es集群,执行所述查询执行语句并将所述查询结果存储在目标文件中。
18.可选地,所述物理查询执行模块,包括:查询优化单元,用于基于所述查询结果合并策略判断需要对多个所述物理查询信息的查询结果进行交集处理,如果确定多个所述物理查询信息中的至少一个物理查询信息的查询结果为空,则停止对于多个所述物理查询信息中的其他物理查询信息所进行的查询处理。
19.可选地,所述查询结果合并模块,包括:内存估算单元,用于基于预设的内存估算算法计算对所述查询结果进行合并处理的内存需求量,根据所述内存需求量进行内存分配;排序排重单元,用于对所述目标文件中的数据进行排序和排重处理;合并处理单元,用于将经过所述排序和排重处理后的目标文件进行文件合并处理;其中,所述文件合并处理包括:文件交集、并集和差集处理。
20.根据本公开的又一方面,提供信息查询装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上所述的方法。
21.根据本公开的再一方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述指令被处理器执行如上所述的方法。
22.本公开的信息查询方法、装置以及存储介质,通过对es的dsl查询规范进行扩展,使用外部关联查询方式获取查询结果并进行关联合并,实现dsl查询语句中对于不同集群索引的关联查询;对于不同索引的过滤条件能够完全独立设置,降低对于dsl查询语句的编写难度,能够提高检索效率和准确率。
附图说明
23.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
24.图1为根据本公开的信息查询方法的一个实施例的流程示意图;
25.图2为根据本公开的信息查询方法的一个实施例中的生成逻辑查询信息的流程示意图;
26.图3为根据本公开的信息查询方法的一个实施例中的对json格式查询语句进行解
析处理的流程示意图;
27.图4为根据本公开的信息查询方法的一个实施例中的逻辑查询信息的层级嵌套结构示意图;
28.图5为根据本公开的信息查询方法的一个实施例中的生成物理查询信息的流程示意图;
29.图6为根据本公开的信息查询方法的一个实施例中的处理查询结果的流程示意图;
30.图7为根据本公开的信息查询方法的一个实施例中的查询执行流程示意图;
31.图8a为根据本公开的信息查询装置的一个实施例的模块示意图;图8b为根据本公开的信息查询装置的另一个实施例的模块示意图;
32.图9为根据本公开的信息查询装置的一个实施例中的查询解析处理模块的模块示意图;
33.图10为根据本公开的信息查询装置的一个实施例中的物理查询执行模块的模块示意图;
34.图11为根据本公开的信息查询装置的一个实施例中的查询结果合并模块的模块示意图;
35.图12为根据本公开的信息查询装置的又一个实施例的模块示意图。
具体实施方式
36.下面参照附图对本公开进行更全面的描述,其中说明本公开的示例性实施例。下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
37.elasticsearch简称为es,是一款分布式全文检索框架,底层基于lucene实现。es系统使用json(javascript object notation,js对象简谱)格式存储数据,属于文档存储。es支持很多查询方式,其中一种是dsl(domain specific language,特定领域语言),将查询请求写在json里面,然后进行相关的查询;es系统提供了restful api方式来访问并使用json格式,支持match查询、multi_match查询、term查询、range查询以及bool查询等。
38.在某些场景下,需要同时过滤多个映射类型不同的索引(index),并将它们的结果通过隐式的关系进行合并、去重,然后导入到文件中去,为业务应用提供分析使用。例如,不同索引从不同维度描述了一个用户(pin)在京东网站上的行为,通过对这些索引过滤合并后得到的用户群(pin集合)进行短信投放,能够达到精准营销的效果,结果集可达几十万甚至上百万个。
39.目前,es系统可以使用多索引查询、嵌套查询、父子查询等来支持一些简单的关联查询,但是在面对较为复杂的关联查询时,es系统不支持不同集群下索引的关联查询。在使用多索引查询时,过滤条件必须同时符合多个索引。例如,多索引查询语句如下所示:
[0040][0041]
对于上面的多索引查询语句,通过es原生多索引查询只能过滤index-a索引与index-b索引中status都等于3的数据,其中,status条件不能独立于其中一个或几个索引进行过滤,例如对于index-a中的status=3并且index-b中的status=4的查询则无法实现。
[0042]
图1为根据本公开的信息查询方法的一个实施例的流程示意图,如图1所示:
[0043]
步骤101,对接收到的查询请求信息进行转换处理,生成具有层级嵌套结构的逻辑查询信息,逻辑查询信息包括dsl查询语句等。
[0044]
步骤102,根据层级嵌套结构将逻辑查询信息分解为至少一个物理查询信息,并根据逻辑查询信息获取查询结果合并策略。
[0045]
物理查询信息包括dsl查询语句等,物理查询信息可以为逻辑查询信息中的部分查询语句,能够单独在es集群中执行查询功能。查询结果合并策略可以从逻辑查询信息中获取,查询结果合并策略包括对查询结果进行交集、并集和差集等,对应于逻辑查询信息中的must,should,must_not等关键字。
[0046]
步骤103,基于物理查询信息在对应的集群或物理索引中执行查询操作,获取查询结果,集群包括es集群等。
[0047]
物理索引即索引(index),是具有某种相似特征的文档的集合,例如,索引包括客户数据索引、产品目录索引和订单数据索引等。索引由名称(必须全部小写)标识,该名称用于对其中的文档执行索引、搜索、更新和删除等操作。文档是可以是索引的基本信息单元,例如,可以为单个客户创建一个文档,为单个产品创建另一个文档,为单个订单创建另一个文档。该文档用json(javascript对象表示法)表示,json是一种普遍存在的internet数据交换格式。
[0048]
步骤104,根据查询结果合并策略对查询结果进行合并处理,生成与查询请求信息相对应的结果信息。
[0049]
图2为根据本公开的信息查询方法的一个实施例中的生成逻辑查询信息的流程示意图,查询请求信息包括json格式查询语句等,如图2所示:
[0050]
步骤201,对json格式查询语句进行解析处理,获取json格式查询语句中的元素-值对以及元素-值对之间的逻辑关系。
[0051]
可以使用解析器对json格式查询语句进行解析处理,获取的元素-值对为json格式查询语句中的键-值对,元素-值对之间的逻辑关系包括与、或和非逻辑关系等。
[0052]
步骤202,根据元素-值对以及逻辑关系生成es系统的查询构建对象。可以使用解析器生成es系统的查询构建对象querybuilder,查询构建对象可以有多种。
[0053]
步骤203,基于查询构建对象生成逻辑查询信息。
[0054]
可以使用解析器并基于预设的层级嵌套结构生成逻辑查询信息,逻辑查询信息为dsl查询语句。
[0055]
在一个实施例中,如图3所示,接收到用户输入的json格式查询语句,使用解析器将json格式查询语句中的条件json字符串转换为包含有es查询对象querybuilder的dsl查询语句(逻辑查询信息),在执行查询时,会将dsl查询语句转换为多个dsl查询语句(物理查询信息)。查询构建对象包括布尔查询构建对象、值查询构建对象、范围查询构建对象和in查询构建对象等。
[0056]
使用解析器将json格式查询语句进行map(映射)处理,获取json格式查询语句中的元素-值对以及元素-值对之间的逻辑关系;将第一个元素作为root元素,根据元素-值对以及逻辑关系生成es系统的查询构建对象。判断是否有逻辑索引名称,如果有,则根据逻辑关系构建带有逻辑索引信息的灵活别名布尔查询构建对象。逻辑关系包括与、或和非逻辑关系中的一种或多种。
[0057]
在一个实施例中,逻辑查询信息的第一嵌套层级为布尔查询构建对象、第二嵌套层级为灵活别名布尔查询构建对象;位于第一嵌套层级的布尔查询构建对象用于进行逻辑查询,包含至少一个位于第二嵌套层级的灵活别名布尔查询构建对象,以及与至少一个灵活别名布尔查询构建对象相对应的查询结果合并策略,查询结果合并策略包括交集、并集和差集等。
[0058]
灵活别名布尔查询构建对象包含有与es集群相对应的逻辑索引信息以及进行数据过滤的查询构建对象,用于进行物理查询;逻辑索引信息为与物理索引相对的逻辑索引名称等,进行数据过滤的查询构建对象包括等值查询构建对象、范围查询构建对象和、in查询构建对象、布尔查询构建对象中的一种或多种。
[0059]
如图4所示,本公开在es查询dsl的基础上进行了扩展,用于增强查询语义,第一嵌套层级和第二嵌套层级为本公开的扩展规范。部署在服务端的查询解析器会根据该规范拆分逻辑查询信息并路由到不同的索引或集群中去进行查询。
[0060]
设置索引管理器用于配置物理查询信息所对应的es集群,以及索引的集群/分区规则。索引管理器中配置有集群策略、分区策略、配置关联(join)字段名称、配置逻辑索引名称alias等。例如,集群策略:如按日期划分,奇数天的索引在集群a,偶数天的索引在集群b;分区策略:如每周生成一个索引,只查询8周内的索引;配置关联(join)字段名称:例如索引a的pin字段与索引b的user_pin字段关联。fields属性是一个数组,通常第一个字段作为关联属性,其余的字段作为额外的查询属性。
[0061]
配置逻辑索引名称alias:一个物理查询对应一个逻辑索引名称,逻辑索引名称为物理查询信息中的alias部分,客户端会通过此名称进行查询。可以通过扩展supplier<list<string>>接口来完成个性化的集群/分区策略,比如基于日期的分片规则。
[0062]
逻辑查询信息的第一嵌套层级(第一层)必须为bool查询,确定查询结果合并策略,包括交集(must)、并集(should)、差集(must_not)等;第二嵌套层级(第二层)必须为bool查询,且需要带index信息来确定索引所属集群。
[0063]
第二嵌套层级(第二层)为新的灵活别名布尔查询构建对象elasticaliasboolquerybuilder,在查询时需要对es的原生api进行扩展。第三嵌套层级(第三层)设置有查询构建对象,用于进行数据过滤,支持term、terms、range、bool查询等。
[0064]
例如,通过查询解析器将json格式查询语句转换成es的各种查询构建对象querybuilder,通过解析器检查逻辑查询信息的层级结构是否满足约束:第一级必须是boolquerybuilder(es原生api),第二级必须是elasticaliasboolquerybuilder(扩展的boolquerybuilder),第三级往下为符合es原生api的querybuilder。
[0065]
第一级的boolquerybuilder相当于逻辑查询,它包含了多个用于进行物理查询的elasticaliasboolquerybuilder,每个物理查询指向一个特定es集群中的逻辑索引,每个逻辑索引可能指向多个物理索引,例如每七天生成一个索引,查询九十天内的数据。
[0066]
在一个实施例中,在生成逻辑查询信息后,基于预设的修订规则对灵活别名布尔查询构建对象elasticaliasboolquerybuilder进行修订处理,修订处理规则可以有多种,例如,修订处理规则包括为灵活别名布尔查询构建对象增加数据归属过滤字段、基于逻辑索引信息对灵活别名布尔查询构建对象进行合并处理。
[0067]
可以通过解析器对逻辑查询信息进行修订,例如,添加数据归属过滤条件、逻辑索引名称改写、cluster逻辑名称改写、查询优化改写等。逻辑索引名称改写用于映射到物理索引上;cluster逻辑名称改写用于映射到物理客户端上;查询优化改写用于删除冗余过滤条件,单索引查询优化等。
[0068]
可以为每个物理查询信息(elasticaliasboolquerybuilder)强制增加数据归属过滤字段,进行安全性改写。例如,索引中有商家id,商家只能筛选自己的数据。索引别名相当于逻辑索引信息,每个物理查询中最终只能有一个逻辑索引,如果在查询改写前存在多个相同名称的逻辑索引,需要尝试进行合并,如果合并失败会报错提示,用以进行正确性改写。
[0069]
图5为根据本公开的信息查询方法的一个实施例中的生成物理查询信息的流程示意图,如图5所示:
[0070]
步骤501,获取位于第一嵌套层级的布尔查询构建对象所包含的全部灵活别名布尔查询构建对象。
[0071]
步骤502,对逻辑查询信息进行分解处理,用于分别生成与全部灵活别名布尔查询构建对象相对应的物理查询信息;物理查询信息包括逻辑索引信息和进行数据过滤的查询构建对象。
[0072]
在将逻辑查询信息分解成多个物理查询信息(每个物理查询信息对应于逻辑查询信息中的一个elasticaliasboolquerybuilder)后,将各个物理查询信息发送到与逻辑索引信息相对应的es集群中进行查询处理。
[0073]
在一个实施例中,为各个物理查询信息都配置一个执行线程,执行线程用于基于逻辑索引信息将物理查询信息发送到对应的es集群,执行查询执行语句并将查询结果存储在目标文件中。
[0074]
基于查询结果合并策略判断需要对多个物理查询信息的查询结果进行交集处理,如果确定多个物理查询信息中的至少一个物理查询信息的查询结果为空,则停止对于多个物理查询信息中的其他物理查询信息所进行的查询处理。
[0075]
图6为根据本公开的信息查询方法的一个实施例中的处理查询结果的流程示意图,如图6所示:
[0076]
步骤601,基于预设的内存估算算法计算对查询结果进行合并处理的内存需求量,根据内存需求量进行内存分配。可以使用多种内存估算算法。
[0077]
步骤602,对目标文件中的数据进行排序和排重处理。可以多种方法进行排序和排重处理。
[0078]
步骤603,将经过排序和排重处理后的目标文件进行文件合并处理,文件合并处理包括文件交集、并集和差集处理等。
[0079]
在一个实施例中,如图7所示,进行逻辑查询信息拆分,将一个逻辑查询拆分成多个物理查询,生成物理查询集合,其中,逻辑查询信息包含物理查询信息之间的逻辑关系。
[0080]
例如,用户输入json格式查询语句,使用解析器对json格式查询语句进行解析处理并进行相应地修订处理,生成具有层级嵌套结构的逻辑查询信息(dsl查询语句),如下所示:
[0081]
[0082]
[0083][0084]
其中,第一嵌套层级为布尔查询构建对象boolquerybuilde。"alias":"app_eco_user"和"alias":"app_eco_cart"表明是一个物理查询,第二嵌套层级为两个分别包括有"alias":"app_eco_user"和"alias":"app_eco_cart"的两个灵活别名布尔查询构建对象elasticaliasboolquerybuilder,两个elasticaliasboolquerybuilder为两个物理查询信息,查询结果合并策略为“must”,即为交集。
[0085]
每个elasticaliasboolquerybuilder都为物理查询信息,对应一个逻辑索引,一个逻辑索引可以对应多个结构相同的物理索引,每个逻辑索引可以所属不同的es集群。
[0086]
根据app_eco_user逻辑索引进行查询:已婚and(16-25岁or46-55岁)and(100<=付款金额<=200)的用户群;根据app_eco_cart逻辑索引进行查询:加过购物车and(领券or关注)的用户群。对于两个索引的查询结果进行交集计算,关联字段是pin(在索引管理器中配置)。
[0087]
循环异步处理物理查询:使用多线程的方式执行物理查询信息,每个物理查询信息会路由到特定的es集群中去执行,执行的查询结果会放入到本地文件(目标文件)中。查询过滤的结果可能会非常大(例如使用es的scroll api进行全量查询),将一个物理查询信息路由到es集群的对应信息配置在查询管理器中。
[0088]
如果多个物理查询之间是and关系,先对物理查询执行count计数查询,如果有一个物理查询的结果是0,则不需要执行后续处理也不需要生成结果集文件,即目标文件。
[0089]
进行文件排序处理:对物理查询生成的目标文件按join字段进行排序,将大文件先分割成多个已排序的小文件。读取原始文件,计算内存块大小,每个内存块中的数据可以
在限定的内存中完成排序;读取一行数据,估算该字符串占用的字节大小,并进行累计内存占用量预估计算;循环读取文件中的每一行数据,直到预估内存占用量大于内存块大小。对内存块中的数据进行内存排序并写入到排序文件中去,在写入排序文件时可以进行排重处理。在进行排序处理后,返回存储有所有已排序的小文件集合的文件数组对象。
[0090]
进行文件合并处理:对排序后的多个小文件进行合并,合并后的结果是一个物理查询的结果集。例如,将所有已排序文件对象file转换成bufferedreader对象,将所有bufferedreader对象转换成bufferedreaderwrapper对象(对bufferedreader的一层封装)。将bufferedreaderwrapper加入到一个优先级队列来实现多路归并排序。每次从优先级队列弹出一个bufferedreaderwrapper,读取一行并写入文件,如果存在下一行则放入优先级队列,否则,关闭bufferedreaderwrapper,循环执行上述步骤,直到没有元素弹出为止,则文件合并join阶段完成。
[0091]
使用的内存估算算法可以有多种,对于内存块的内存估算算法如下:
[0092]
long block=length/default_max_temp_files (length%default_max_temp_files==0?0:1);long half=memory/2;block<half?half:block;
[0093]
其中,length:文件字节数,memory:配置的最大排序内存,default_max_temp_files:默认最大暂时文件字节数。
[0094]
对于待排序字符串的内存估算公式如下:
[0095]
object_length_64_bit_jvm:64位操作系统下等于16(对象头) 24(数组对象头) 8(对象引用) 12(3个int字段,不同java版本可能不一样,这里取最大的)个字节;
[0096]
待排序字符串需要的内存为:
[0097]
line.length()*2 object_length_64_bit_jvm;
[0098]
其中,line.length()为待排序字符串的长度。
[0099]
进行文件交并差计算:对与查询结果相对应的目标文件进行交集、并集或差集计算。可以扩展java的file对象,用于实现文件的交集、并集或差集等功能。交集、并集或差集处理会按照查询结果合并策略执行。当对与查询结果相对应的目标文件进行交集、并集或差集处理执行完后,生成的结果文件可以供客户端分析使用。
[0100]
在一个实施例中,如图8a所示,本公开提供一种信息查询装置80,包括:查询解析处理模块81、物理查询获取模块82、物理查询执行模块83和查询结果合并模块84。
[0101]
查询解析处理模块81对接收到的查询请求信息进行转换处理,生成具有层级嵌套结构的逻辑查询信息,逻辑查询信息包括dsl查询语句等。物理查询获取模块82根据层级嵌套结构将逻辑查询信息分解为至少一个物理查询信息,并根据逻辑查询信息获取查询结果合并策略。
[0102]
物理查询执行模块83基于物理查询信息在对应的集群或物理索引中执行查询操作,获取查询结果,集群包括es集群等。查询结果合并模块84根据查询结果合并策略对查询结果进行合并处理,生成与查询请求信息相对应的结果信息。
[0103]
在一个实施例中,查询请求信息包括json格式查询语句;如图9所示,查询解析处理模块81包括解析单元811和构建单元812。解析单元811对json格式查询语句进行解析处理,获取json格式查询语句中的元素-值对以及元素-值对之间的逻辑关系。构建单元812根据元素-值对以及逻辑关系生成es系统的查询构建对象,构建单元812基于查询构建对象生
成逻辑查询信息,逻辑关系包括与、或和非逻辑关系中的一种或多种。
[0104]
逻辑查询信息的第一嵌套层级为布尔查询构建对象、第二嵌套层级为灵活别名布尔查询构建对象;位于第一嵌套层级的布尔查询构建对象用于进行逻辑查询,包含至少一个位于第二嵌套层级的灵活别名布尔查询构建对象,以及与至少一个灵活别名布尔查询构建对象相对应的查询结果合并策略,查询结果合并策略包括交集、并集和差集等。
[0105]
灵活别名布尔查询构建对象包含有与es集群相对应的逻辑索引信息以及进行数据过滤的查询构建对象,用于进行物理查询;其中,进行数据过滤的查询构建对象包括等值查询构建对象、范围查询构建对象和、in查询构建对象、布尔查询构建对象中的一种或多种。
[0106]
在一个实施例中,如图8b所示,信息查询装置80还包括查询信息修订模块85,查询信息修订模块85在生成逻辑查询信息后,基于预设的修订规则对灵活别名布尔查询构建对象进行修订处理,修订处理规则包括为灵活别名布尔查询构建对象增加数据归属过滤字段、基于逻辑索引信息对灵活别名布尔查询构建对象进行合并处理等。
[0107]
物理查询获取模块82获取位于第一嵌套层级的布尔查询构建对象所包含的全部灵活别名布尔查询构建对象。物理查询获取模块82对逻辑查询信息进行分解处理,用于分别生成与全部灵活别名布尔查询构建对象相对应的物理查询信息,物理查询信息包括逻辑索引信息和进行数据过滤的查询构建对象等。
[0108]
在一个实施例中,如图10所示,物理查询执行模块83包括:查询处理单元831和查询优化单元832。查询处理单元831为各个物理查询信息都配置一个执行线程,执行线程用于基于逻辑索引信息将物理查询信息发送到对应的es集群,执行查询执行语句并将查询结果存储在目标文件中。
[0109]
查询优化单元832基于查询结果合并策略判断需要对多个物理查询信息的查询结果进行交集处理,如果查询优化单元832确定多个物理查询信息中的至少一个物理查询信息的查询结果为空,则停止对于多个物理查询信息中的其他物理查询信息所进行的查询处理。
[0110]
在一个实施例中,如图11所示,查询结果合并模块84包括内存估算单元841、排序排重单元842和合并处理单元843。内存估算单元841基于预设的内存估算算法计算对查询结果进行合并处理的内存需求量,根据内存需求量进行内存分配。排序排重单元842对目标文件中的数据进行排序和排重处理。合并处理单元843将经过排序和排重处理后的目标文件进行文件合并处理,文件合并处理包括:文件交集、并集和差集处理。
[0111]
图12为根据本公开的信息查询装置的又一个实施例的模块示意图。如图12所示,该装置可包括存储器121、处理器122、通信接口123以及总线124。存储器121用于存储指令,处理器122耦合到存储器121,处理器122被配置为基于存储器121存储的指令执行实现上述的信息查询方法。
[0112]
存储器121可以为高速ram存储器、非易失性存储器(non-volatile memory)等,存储器121也可以是存储器阵列。存储器121还可能被分块,并且块可按一定的规则组合成虚拟卷。处理器122可以为中央处理器cpu,或专用集成电路asic(application specific integrated circuit),或者是被配置成实施本公开的信息查询方法的一个或多个集成电路。
[0113]
在一个实施例中,本公开提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,指令被处理器执行如上任一实施例中的方法。
[0114]
上述实施例中提供的信息查询方法、装置以及存储介质,生成与查询请求信息相对应的、具有层级嵌套结构的逻辑查询信息,将逻辑查询信息分解为物理查询信息并获取查询结果合并策略,基于物理查询信息在对应的集群或物理索引中执行查询操作,并对查询结果进行合并处理;通过对es的dsl查询规范进行扩展,使用外部关联查询方式获取查询结果并进行关联合并,实现dsl查询语句中对于不同集群索引的关联查询;对于不同索引的过滤条件能够完全独立设置,降低对于dsl查询语句的编写难度,能够提高检索效率和准确率。
[0115]
可能以许多方式来实现本公开的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和系统。用于方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
[0116]
本公开的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本公开限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本公开的原理和实际应用,并且使本领域的普通技术人员能够理解本公开从而设计适于特定用途的带有各种修改的各种实施例。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜