掌桥专利:专业的专利平台
掌桥专利
首页

数据查询方法、装置、设备和存储介质

文献发布时间:2023-06-19 09:57:26


数据查询方法、装置、设备和存储介质

技术领域

本申请实施例涉及金融科技(Fintech)技术领域,尤其涉及一种数据查询方法、装置、设备和存储介质。

背景技术

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Finteh)转变,数据查询技术也不例外,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。

相关技术中,一般基于一组关键词来查询关联的文章。随着互联网的发展,互联网上的信息越来越多,用户从海量的信息中查找相关的目标文章耗时较长,因此数据查询效率较低。

发明内容

本申请实施例提供一种数据查询方法、装置、设备和存储介质,以提高数据查询效率。

第一方面,本申请实施例提供一种数据查询方法,包括:

获取用户输入的第一关键词集合,以及所述第一关键词集合对应的第一索引信息,所述第一索引信息为根据所述第一关键词集合中的关键词的索引得到的;

若确定所述第一关键词集合对应的查询结果的数量不是第一预设值,则根据所述第一索引信息以及第一对应关系,确定第二关键词集合;所述第一对应关系包括:所述第一索引信息与所述第二关键词集合对应的第二索引信息之间的对应关系;

根据所述第二关键词集合以及第二对应关系,确定所述第二关键词集合对应的目标查询结果;所述第二对应关系包括:索引信息与查询结果的索引值之间的对应关系。

第二方面,本申请实施例提供一种数据查询装置,包括:

获取模块,用于获取用户输入的第一关键词集合,以及所述第一关键词集合对应的第一索引信息,所述第一索引信息为根据所述第一关键词集合中的关键词的索引得到的;

确定模块,用于若确定所述第一关键词集合对应的查询结果的数量不是第一预设值,则根据所述第一索引信息以及第一对应关系,确定第二关键词集合;所述第一对应关系包括:所述第一索引信息与所述第二关键词集合对应的第二索引信息之间的对应关系;

处理模块,用于根据所述第二关键词集合以及第二对应关系,确定所述第二关键词集合对应的目标查询结果;所述第二对应关系包括:索引信息与查询结果的索引值之间的对应关系。

第三方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面中任一项所述的方法。

第四方面,本申请实施例提供一种电子设备,包括:

处理器;以及

存储器,用于存储所述处理器的可执行指令;

其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的方法。

第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如第一方面中任一项所述的方法。

本申请实施例提供的数据查询方法、装置、设备和存储介质,获取用户输入的第一关键词集合,以及第一关键词集合对应的第一索引信息,第一索引信息为根据第一关键词集合中的关键词的索引得到的;进一步,由于提前预设了第一索引信息与第二关键词集合对应的第二索引信息之间的对应关系,能够根据第一索引信息以及第一对应关系,较快的确定出第二关键词集合,即下一组关键词集合;而且还预设了关键词集合对应的索引信息与查询结果的索引值之间的对应关系,能够根据第二关键词集合以及第二对应关系,快速确定出第二关键词集合对应的目标查询结果,使得查询时耗时较少,因此提高了查询效率。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1为本申请实施例提供的系统架构示意图;

图2是本申请一实施例提供的数据查询方法的流程示意图;

图3是本申请另一实施例提供的文章和关键词提取流程示意图;

图4是本申请另一实施例提供的对应关系存储流程示意图;

图5是本申请实施例提供的数据查询装置的结构示意图;

图6是本申请实施例提供的电子设备的结构示意图。

通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

本申请的说明书和权利要求书及所述附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先,对本申请实施例涉及的部分词汇和应用场景进行介绍。

文章(Article):是内嵌于静态超文本标记语言(Hyper Text Markup Language,HTML)字符串中以

为标记标识的子字符串。

内嵌关键词(Tag):是内嵌于文章并用来标记文章的关键词,属于一种文章分类方式,一篇文章内可能会含有一个或者多个内嵌关键词。

下一组关键词集合是指用户可能会感兴趣的,与当前关键词集合相关的其他关键词组成的集合。

图1为本申请实施例提供的系统架构示意图。如图1所示,本申请实施例的系统架构中可以包括但不限于:电子设备11和服务器12。

其中,电子设备11和服务器12之间可以通过网络连接。

本申请实施例提供的方法可由一个电子设备如处理器执行相应的软件代码实现,也可由一个电子设备在执行相应的软件代码的同时,通过和控制器进行数据交互来实现。

相关技术中,一般基于一组关键词来查询关联的文章。但随着互联网的发展,互联网上的信息越来越多,用户从海量的信息中查找相关的目标文章耗时较长,因此数据查询效率较低。

本申请实施例的查询方法中,获取用户输入的至少一个关键词,根据输入关键词的字符串的匹配结果查找到下一组关键词集合并返回,进而根据下一组关键词集合查找关联文章,例如用户可以从下一组关键词集合中选择一个关键词后继续进行查询,直到关联到目标文章,将相应的目标文章返回给用户。

本申请实施例的方法的技术构思如下:通过提前存储第一关键词集合对应的第一索引信息与所述第二关键词集合对应的第二索引信息之间的对应关系,以及关键词集合对应的索引信息与查询结果的索引值之间的对应关系,可以使得查询时耗时较少,即能够快速确定第一关键词集合对应的下一组关键词集合,即第二关键词集合,以及关键词集合最终对应的目标查询结果,提高了查询效率。

本申请实施例的方案的目的是为了用户通过选择的单个或者多个关键词,获取更详细的信息。比如在网络客户服务领域,通常来说,大部分用户其实并不知道他们需要何种类型的客户服务。如果可以给用户提供一些预先设定好的关键词,用户可以选择一个与他们所遇到问题最相关的关键词作为起始关键词,根据提供的下一组关键词集合不断过滤用户的查询,直到得到与用户选择的关键词集合所匹配的查询结果。

本申请以下实施例中,查询结果以文章为例进行说明,本申请实施例对此并不限定。

为了方便阐述本申请实施例的方法,做一下几点假设:

1、本申请实施例中文章是一个完整的HTML字符串,通过

标记进行标识,而内嵌于文章中的关键词列表作为
标记的属性,但是有些文章中可以没有内嵌关键词。比如:

S1

,这里的data-tags属性的值C,A,B就是内嵌关键词集合。又例如,

S1

,该文章没有内嵌关键词。

2、本申请实施例中文章是不具有嵌套性的,换句话说,就是一篇文章不可以再嵌套另外一篇文章。

3、本申请实施例中单一文章的内嵌关键词不具有重复性。举例来说,=一个有效的内嵌关键词集合:data-tags="C,A,B"。但是下面的内嵌关键词集合是无效的:data-tags="C,A,C,B"。

4、本申请实施例中每一篇文章的内嵌关键词集合具有唯一性。比如这个内嵌关键词集合在海量文章中只会出现一次:data-tags="C,A,B"。进一步还假设内嵌关键词集合的关键词同样具有无序性,换句话说:data-tags="C,A,B"和data-tags="A,B,C"是一样的。同样的,下一组关键词集合内的关键词同样具有无序性。

5、本申请实施例中先不考虑关键词的格式(例如含有英文,大小写,或者含有拉丁文特殊字符等)。

下面以具体的实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。

图2是本申请一实施例提供的数据查询方法的流程示意图。如图2所示,本实施例提供的方法,包括:

步骤101、获取用户输入的第一关键词集合,以及第一关键词集合对应的第一索引信息,第一索引信息为根据第一关键词集合中的关键词的索引得到的。

具体的,第一关键词集合可以包括一个或多个关键词,第一关键词集合可以是用户根据设备提供的多个关键词选择的,或用户主动输入的。

可以对关键词设置对应的索引,索引可以是正整数值,例如表1所示:

表1

根据第一关键词集合中的各个关键词的索引,得到该第一关键词集合对应的第一索引信息,该第一索引信息可以是根据至少一个索引经过预设函数计算得到的一个数值,例如是整数。

例如,第一关键词集合包括{A,B,C,D},对应的第一索引信息例如为20+2

其中,预设函数例如为指数函数、二进制求和等函数,本申请实施例对此并不限定。

步骤102、若确定第一关键词集合对应的查询结果的数量不是第一预设值,则根据第一索引信息以及第一对应关系,确定第二关键词集合;第一对应关系包括:第一索引信息与第二关键词集合对应的第二索引信息之间的对应关系。

具体的,根据第一关键词集合获取的查询结果,包括以下几种可能的情况:

1、当前用户输入的第一关键词集合完全匹配某一篇文章的内嵌关键词集合,例如文章S1的内嵌关键词集合为{A,B,C,D},与当前用户输入的第一关键词集合{A,B,C,D}完全匹配;此时,第一关键词集合{A,B,C,D}还可能是另一篇文章的内嵌关键词集合的子集。该情况下可以将文章S1返回给用户。

该情况下查询结果的数量为至少一个,可以是一个或多个。

如果完全匹配,依然需要返回第二关键词集合,因为当前用户输入的关键词集合可能完全匹配某一篇文章的内嵌关键词集合,同时也可能是另一篇文章内嵌关键词集合的子集,所以查询不能终止于完全匹配。

2、当前用户输入的第一关键词集合是某一篇文章的内嵌关键词集合的子集,此时可以分以下几种情况:

(1)如果当前用户输入的第一关键词集合并不完全匹配某一篇文章的内嵌关键词集合,但是可以指向唯一文章。举例来说:当前用户输入的第一关键词集合是{A,E},存储的海量文章中并没有能与其完全匹配的文章,但是能够唯一指向内嵌关键词集合是{A,B,C,E,F}的文章,因为关键词E只在这篇文章中出现。在这种情况下,就可以直接跳过后面的所有查询,直接返回这篇文章。而且在这种情况下可以不返回下一组关键词集合,即第二关键词集合,因为不论如何,最后的查询结果只能是这篇文章。这种情况称为“加速查询”:不论当前用户的关键词集合和某一篇文章内嵌关键词集合是子集匹配还是全集匹配,只要它可以唯一的指向此文章,则跳过后面的查询过程,只返回此文章。

该情况下查询结果的数量为一个。

(2)虽然每一篇文章的内嵌关键词集合具有唯一性,但是此集合的子集不具有唯一性。举例来说:当前文章的内嵌关键词集合是{A,B,C,D,E},这个集合在文章的内嵌关键词集合中具有唯一性,但是其子集{A,C,D}并不具有唯一性,因为这个子集可能也是其他文章内嵌关键词集合的子集。

例如,用户输入的第一关键词集合是{A,C,D},则该第一关键词集合对应的文章可能是多个,即不指向单一文章,即查询结果的数量为多个。

综上,当第一关键词集合对应的查询结果的数量不是第一预设值,例如不是一个时,则确定下一组关键词集合,即根据第一索引信息以及第一对应关系,确定第二关键词集合。

其中,第一对应关系是指第一索引信息与第二关键词集合对应的第二索引信息之间的对应关系,第二索引信息是根据第二关键词集合中各个关键词对应的索引得到的,与第一索引信息的计算方式相同。

第一对应关系例如可以通过如下的表2表示:

表2

根据第一索引信息和第一对应关系,可以得到第一索引信息对应的第二索引信息,进而根据第二索引信息可以得到第一关键词集合对应的下一组关键词集合,即第二关键词集合。

例如,当前用户输入的关键词集合是某一篇文章的内嵌关键词集合的子集,下一组关键词集合,即第二关键词集合可以包含这篇文章中不存在于当前用户输入的关键词集合中的关键词。举例说明:如果文章Article1的内嵌关键词集合是{A,C,B,D},当前用户输入的关键词集合是{A,B},那么第二关键词集合中可以包括{C,D}。

步骤103、根据第二关键词集合以及第二对应关系,确定第二关键词集合对应的目标查询结果;第二对应关系包括:索引信息与查询结果的索引值之间的对应关系。

具体的,第二对应关系是指关键词集合对应的索引信息与查询结果的索引值之间的对应关系。例如如下表3所示:

表3

如果根据第二关键词集合,不能确定出唯一的查询结果,则可以重复执行步骤102-103的方案,确定下一组关键词集合,再查询该下一组关键词集合对应的文章,直至查询到唯一的目标文章,即唯一的目标查询结果。

在一实施例中,确定目标查询结果,可以通过如下方式实现:

根据所述第二关键词集合以及第二对应关系,确定所述第二关键词集合对应的目标查询结果的索引值;

根据所述第二关键词集合对应的目标查询结果的索引值,确定所述第二关键词集合对应的目标查询结果。

例如,表4中所示,每一篇文章对应一个唯一的索引值。

表4

查询结果与查询结果的索引值具有一一对应关系。

即根据第二对应关系,可以确定该关键词集合对应的查询结果的索引值,进而根据索引值得到目标查询结果。

本实施例的方法,获取用户输入的第一关键词集合,以及第一关键词集合对应的第一索引信息,第一索引信息为根据第一关键词集合中的关键词的索引得到的;进一步,由于提前预设了第一索引信息与第二关键词集合对应的第二索引信息之间的对应关系,能够根据第一索引信息以及第一对应关系,较快的确定出第二关键词集合,即下一组关键词集合;而且还预设了关键词集合对应的索引信息与查询结果的索引值之间的对应关系,能够根据第二关键词集合以及第二对应关系,快速确定出第二关键词集合对应的目标查询结果,使得查询时耗时较少,因此提高了查询效率。

在上述实施例的基础上,所述第二对应关系为所述索引信息和第二预设值,与查询结果的索引值的对应关系,所述第二预设值用于表示所述关键词集合与对应的查询结果完全匹配,或所述关键词集合对应单一的查询结果或非单一的查询结果,所述确定所述第一关键词集合对应的查询结果的数量,可以通过如下方式确定:

根据所述第二对应关系以及所述第一关键词集合对应的第一索引信息,确定所述第一关键词集合对应的第二预设值;

根据所述第一关键词集合对应的第二预设值,确定所述第一关键词集合对应的查询结果的数量。

具体的,通过第二对应关系存储匹配信息,第二对应关系例如通过MATCH_LOOKUP字典存储,可以分为以下几种情况:

1、如果关键词集合与查询结果完全匹配,则存储(关键词集合(用索引信息,如整数表示),1),与文章字符串的索引(如整数)之间的对应关系;

2、如果是关键词集合为某一文章的内嵌关键词集合的子集,而且该关键词集合唯一指向该文章,则存储(关键词集合(用索引信息,如整数表示)),0),与文章字符串的索引(如整数)之间的对应关系;

3、如果是关键词集合为某一文章的内嵌关键词集合的子集,而且该关键词集合不是唯一指向该文章,即该关键词集合也是另一篇文章的内嵌关键词集合的子集,则存储(关键词集合(用索引信息,如整数表示),0),与预设字符串之间的对应关系,预设字符串例如为NONE,例如预设字符串例如还可以是预设数值。

其中,上述对应关系中的1也可以用其他整数代替,本申请实施例对此并不限定。

在存储的第二对应关系中查找第一索引信息,若存在某一条对应关系,则获取其中的第二预设值,以及查询结果对应的索引值,若为完全匹配的对应关系,即第1中情况,则第二预设值例如为1;索引值例如为一篇文章的索引值;若为第2种情况,则第二预设值例如为0;索引值例如为一篇文章的索引值;若为第3种情况,则第二预设值例如为0;索引值例如为某一预设值。

根据得到的第二预设值,可以确定第一关键词集合对应的查询结果的数量,例如若为第1种情况,查询结果的数量不是第一预设值;若为第2种情况,查询结果的数量是第一预设值,即该关键词集合唯一指向一篇文章;若为第3种情况,查询结果的数量不是第一预设值。

上述实施方式中,第二对应关系中还包括第二预设值,用于表示所述关键词集合与对应的查询结果完全匹配,或所述关键词集合对应单一的查询结果或非单一的查询结果,能够区分出关键词集合对应的查询结果的数量,例如完全匹配,则对应的查询结果的数量可能为多个,即不是第一预设值,例如关键词集合对应单一的查询结果,则查询结果的数量为第一预设值,例如关键词集合对应非单一的查询结果,则查询结果的数量不是第一预设值,实现较为简单,第二对应关系中仅增加了第二预设值,空间复杂度较低。

在一实施例中,步骤“确定所述第一关键词集合对应的查询结果的数量”可以通过如下方式实现:

若所述第二预设值为M1,则确定所述第一关键词集合对应的查询结果的数量不是第一预设值;M1为整数,或,

若所述第二预设值为M2,且所述查询结果对应的索引值不等于单一查询结果的索引值,则确定所述第一关键词集合对应的查询结果的数量不是第一预设值;其中,M2不等于M1。

具体的,若第二预设值为M1,即满足上述的第1种情况,完全匹配,但可能存在其他文章的内嵌关键词集合包含该第一关键词集合,则确定第一关键词集合对应的查询结果的数量不是第一预设值。

若第二预设值为M2,则说明该第一关键词集合为某些文章的内嵌关键词集合的子集,进一步若查询结果对应的索引值不等于单一查询结果的索引值,即不是某一篇文章的索引值,则说明该第一关键词集合为多个文章的内嵌关键词集合的子集,即不是唯一指向某一篇文章,因此确定第一关键词集合对应的查询结果的数量不是第一预设值。

在其他实施例中,第二预设值例如可以是其他数值,可以采用不同的三个数值,区分以上三种情况,本申请实施例对此并不限定。

上述实施方式中,第二预设值通过不同的数值,区分关键词集合对应的查询结果的不同情况,实现较为简单。

在一实施例中,确定第一索引信息可以通过如下方式实现:

对于所述第一关键词集合中的任一关键词来说,确定以a为底数,以所述关键词的索引为幂的指数函数的值;a为大于1的整数

将所述第一关键词集合中各个关键词对应的指数函数的值之和,作为所述第一关键词集合对应的第一索引信息。

具体的,以下以a=2为例进行说明:

如表1所示,例如,第一关键词集合为{A,B,C},则第一关键词集合对应的第一索引信息为2

例如,第一关键词集合为{A,D,E},则第一关键词集合对应的第一索引信息为2

在一实施例中,每一个关键词对应一个索引(例如从0开始的整数)。假设有一个关键词集合KeyList,其中每个关键词对应的整数值为IntKey(N),N=0,1,2,3,....,其中,IntKey(N)表示a

借用整数在计算机内是二进制存储方式的逻辑,可以把关键词集合看作是该关键词集合内所有关键词的二进制之和

因此,可以用一个数值(如整数)来代表一个关键词集合。可以优化空间复杂度,因为存储整数要比存储字符串节省空间,同时关键词在关键词集合里的无序性对查询没有影响,因为每个关键词都对应唯一的一个整数,不管这个关键词在关键词集合中何处出现,只需要对它所代表的整数的二进制进行左移操作并加到关键词集合的整数值就可以了。

上述实施方式中,实现了根据关键词集合中各个关键词的索引,得到该关键词集合对应的索引信息,索引信息较为简单,实现复杂度较低,效率较高。

在一实施例中,确定第二关键词集合可以通过如下方式实现:

根据所述第一索引信息以及第一对应关系,确定所述第二关键词集合对应的第二索引信息;

根据所述第二索引信息,确定所述第二关键词集合。

其中,根据第二索引信息,确定第二关键词集合可以通过如下方式实现:

将所述第二索引信息转化为二进制数,将所述二进制数与所述二进制数的负数进行按位与操作,得到目标值;

根据所述目标值中第三预设值所在的位置,获取所述第二关键词集合中各个关键词对应的索引;

根据所述第二关键词集合中各个关键词对应的索引,确定所述第二关键词集合中各个关键词。

具体的,将第二索引信息转化为二进制数,将该二进制数与该二进制的负数进行按位与操作,依次找到低位的1的位置,从而得到该第二关键词集合中的各个关键词。

例如,第二索引信息为4,二进制为100,与该二进制的负数按位与操作之后得到100,低位的1为从右往左数第2位,将2为索引找到对应的关键词为{C}。

例如,第二索引信息为12,二进制为1100,与该二进制的负数按位与操作之后得到1100,低位的1为从右往左数第2位,1100减去100得到1000,低位的1为从右往左数第3位,因此对应的关键词为{C,D}。

上述实施方式中,实现了根据关键词集合对应的索引信息,得到该关键词集合中各个关键词单,实现复杂度较低,效率较高。

在一实施例中,为了方便查询,需要先存储上述的对应关系,如第一对应关系和第二对应关系,首先需要从HTML字符串中提取文章和关键词,以下介绍文章和关键词的提取过程:

如图3所示,从HTML字符串的起始位置开始查找关键词标签“data-tags=”子字符串。

如果找不到,说明该文章里不具有内嵌关键词,则跳到下一个HTML字符串。

如果找到关键词标签“data-tags=”子字符串,假设得到的结果是关键词为P,以此为分界线,对于HTML字符串起始位置到关键词P的字符串从右侧往左进行

的查找,即从关键词P的字符串开始向HTML字符串起始位置查找
,并同时对于此P到HTML的结束位置从左侧往右进行
的查找,即即从关键词P的字符串开始向HTML字符串结束位置查找
。找到这两个标记后,就可以提取出文章了。为了得到内嵌关键词集合,同样从P开始到HTML的结束位置查找下一个子字符串“data-tags=”,这样就可以提取出文章的内嵌关键词集合。

在一实施例中,对于海量的HTML字符串,可以通过撰写MapReduce任务来处理,即通过并行程序提取文章和内嵌关键词。

进一步,本申请实施例的方法为了实现高效的查询,提供了有效的数据结构来支撑。本申请实施例中使用字典作为主要数据结构,因为字典可以提供常数时间O(1)的查询。即通过字典存储前述实施例中的第一对应关系和第二对应关系。

本申请实施例的方法中,定义两个字典,一个字典MATCH_LOOKUP存储匹配信息(即存储第二对应关系),而另外一个字典NEXT_TAGS_LOOKUP存储“下一组关键词”信息(即存储第一对应关系)。

MATCH_LOOKUP这个字典存储第二对应关系中三种对应关系:

如果是完全匹配(即关键词集合与某一篇文章的内嵌关键词集合完全匹配),存储:关键词集合与文章字符串之间的对应关系。

如果某关键词集合作为某一篇文章的内嵌关键词集合的子集,可以唯一指向该文章,存储:关键词集合与文章字符串之间的对应关系。

如果某关键词集合作为某一篇文章的内嵌关键词集合的子集,但不是唯一指向该文章,即该关键词集合还作为另一些文章的内嵌关键词的子集,存储:关键词集合,与预设字符串(例如None)之间的对应关系。NONE可以表示不是唯一指向单一文章。

那么在更新这个字典信息的时候,如何知道哪个是完全匹配,哪个是唯一指向文章呢?因此,还需要区分该两种情况,本申请实施例中可以将存储方式修改为:

如果是完全匹配,存储(关键词集合,1),与文章字符串之间的对应关系。

如果关键词集合可以唯一指向单一文章,存储(关键词集合,0),与文章字符串之间的对应关系。

如果关键词集合不可以唯一指向单一文章,存储(关键词集合,0),与None之间的对应关系。

上述文章字符串可能会在字典MATCH_LOOKUP多次重复出现,例如,某一篇文章的内嵌关键词集合为{A,B,E},则({A,E},0)({B,E},0)会出现在字典MATCH_LOOKUP中,该文章的文章字符串会被复制很多次。但是一个文章字符串可能会占用很大空间,所以为了减小空间复杂度,需要额外的一个列表ARTICLES,用来存储文章字符串与索引值的对应关系。在MATCH_LOOKUP字典里不存储文章字符串,而是存储文章字符串在这个列表ARTICLES中的索引值。这是因为文章字符串具有唯一性,通过这种方法只需要存储文章字符串一次,而在MATCH_LOOKUP使用索引值比使用文章字符串省了很多空间。因此,字典MATCH_LOOKUP存储方式例如为:

1、完全匹配,存储:(关键词集合,1),与文章字符串的索引(如整数)之间的对应关系;

2、某关键词集合作为单一文章的内嵌关键词集合的子集,并唯一指向该文章,存储:(关键词集合,0),与文章字符串的索引(如整数)之间的对应关系;

3、某关键词集合作为单一文章的内嵌关键词集合的子集,但不唯一指向该文章,存储:(关键词集合,0),与None之间的对应关系。

为了进一步减小空间复杂度,由于关键词集合为字符串,可以利用索引信息代替存储的关键词集合,索引信息例如为根据关键词的索引得到的数值,MATCH_LOOKUP存储方式例如为:

1、完全匹配,存储:(关键词集合对应的索引信息(如整数),1),与文章字符串的索引(如整数)之间的对应关系;

2、某关键词集合作为单一文章的内嵌关键词集合的子集,并唯一指向该文章,存储:(关键词集合对应的索引信息(如整数),0),与文章字符串的索引(如整数)之间的对应关系;

3、某关键词集合作为单一文章的内嵌关键词集合的子集,但不唯一指向该文章,存储:(关键词集合对应的索引信息(如整数),0),与None之间的对应关系。

对于第二个字典NEXT_TAGS_LOOKUP,这个字典只存储“关键词集合,与下一组关键词集合的对应关系,即第一关键词集合与第二关键词集合的对应关系”,因此可以通过该字典以及当前的关键词集合,查询到下一组关键词集合。

由于在上述两个字典中都使用关键词集合作为字典的键,但是每个关键词都是一个字符串,同一个关键词可能会多次出现(比如在NEXT_TAGS_LOOKUP里面既要存储全集,又要存储子集),为了减小空间复杂度,可以考虑不存储关键词的字符串本身。

而且还要考虑到关键词在关键词集合里面是具有无序性的。所以在存储到这两个字典里之前,为了方便后面的查询,可能需要先对关键词集合里的关键词进行排序,但是如果进行排序处理的话就会大量的增加时间复杂度(因为最好的排序算法复杂度最低可能只是O(NlogN),这里的N是关键词集合的长度)。

因此,本申请实施例中采用根据关键词的索引得到的一个数值(如整数)来代表一个关键词集合。可以优化空间复杂度,因为存储一个数值要比存储字符串节省空间,同时关键词在关键词集合里的无序性对查询没有任何影响,因为每个关键词都对应唯一的一个索引(如整数),不管这个关键词在关键词集合中的何处出现,例如只需要对它所代表的索引进行指数函数值计算并加到关键词集合的数值上就可以了。因此,对NEXT_TAGS_LOOKUP字典进行调整。

NEXT_TAGS_LOOKUP存储:关键词集合对应的索引信息,与“下一组关键词“集合对应的索引信息之间的对应关系。

进一步,在原数据结构的基础上加入另外一个字典WORD_AND_INDEX,用来存储关键词和索引的关联信息。与前面两个字典不同的是,这个字典可以从关键词查询到索引,同时也可以从索引查询到关键词。从关键词查询到索引是因为想记录每个关键词对应的索引,不能给同一个关键词分配多个索引,即关键词和索引是一一对应的。而从索引查到关键词是因为“下一组关键词”集合也是用索引信息表示的,在确定下一组关键词集合时需要根据索引确定出该下一组关键词集合包括的所有关键词。

综上,可以得到以下3个字典,如下表5所示:

表5

在一实施例中,本实施例的方法,还包括:

获取至少一个第一数据,以及各个所述第一数据的关键词集合;

对于任一所述第一数据的关键词集合,获取所述第一数据的关键词集合对应的索引信息;

获取所述第一数据的关键词集合的至少一个第一子集,以及各个第一子集对应的索引信息;

根据各个所述第一数据的关键词集合对应的索引信息,对各个所述第一子集对应的索引信息以及对应第一数据的索引值之间的对应关系进行存储。

具体的,第一数据例如为文章字符串,假设已经得到文章字符串和内嵌关键词集合。

首先,把文章字符串存入ARTICLES列表,并返回文章对应的索引值。

其次,处理关键词集合。遍历关键词集合,对于该关键词集合里的每一个关键词,得到该关键词对应的索引,如表1中所示的整数(如果关键词不存在于WORD_AND_INDEX字典中,则赋予它一个整数值并存入到WORD_AND_INDEX中),另外,还需要计算该关键词集合对应的索引信息,即第一数据的关键词集合对应的索引信息,例如计算得到关键词集合对应的整数值TAGS_SUM。

然后,需要得到每一个关键词集合的所有第一子集(同时也包括全集)。可以使用递归来处理这个问题。在递归的同时,不仅要计算当前第一子集对应的索引信息,例如为整数值,进一步可确定每个第一子集对应的索引信息,以及该第一子集对应的文章(即第一数据)的索引值之间的对应关系,还要向MATCH_LOOKUP和NEXT_TAGS_LOOKUP两个字典里进行插入操作。

在一实施例中,插入操作可通过如下方式实现:

若所述第一子集与第二数据的关键词集合相同,则将所述第一子集对应的索引信息、第二预设值与所述第二数据的索引值之间的对应关系,插入所述第二对应关系中;其中,所述第一数据包括所述第二数据;

若所述第一子集为第三数据的关键词集合的第二子集,则确定所述第二对应关系中是否存在所述第一子集对应的索引信息,与第二预设值之间的对应关系;

若是,且所述第二预设值为M2,则将所述第二对应关系中所述第一子集对应的索引信息的对应关系中第三数据的数量修改为第四预设值;

若否,则将所述第一子集对应的索引信息、第二预设值与所述第三数据的索引值之间的对应关系,插入所述第二对应关系中;其中,所述第一数据包括所述第三数据。

以下说明如何将对应关系存储在字典中(即第一对应关系和第二对应关系中)。如图4所示:

插入的具体实现过程如下:

(1)如果当前的关键词集合(即第一子集)是某个文章的内嵌关键词集合的全集,即第一子集与某个文章的内嵌关键词集合相同,则直接插入MATCH_LOOKUP字典里,即将关键词集合与文章字符串的关联直接插入MATCH_LOOKUP字典,将第一子集对应的索引信息、第二预设值与文章的索引值之间的对应关系插入,其中,第二预设值例如为M1,例如为1。不管当前的关键词集合是不是其他文章的内嵌关键词集合的子集,也不管这个关键词集合是否已经存在于字典中,假设关键词集合全集匹配具有更高的优先级。对于NEXT_TAGS_LOOKUP,不做任何操作,因为当前的关键词集合没有对应的“下一组关键词”集合。

(2)如果当前的关键词集合(第一子集)只是某个文章的内嵌关键词集合的第二子集,则分以下几种情况:

(a)插入到MATCH_LOOKUP字典里。

确定MATCH_LOOKUP字典中是否存在第一子集对应的索引信息,与第二预设值之间的对应关系,如果在MATCH_LOOKUP字典里已经存在与这个关键词集合相同的全集,换句话说(关键词集合(整数),1)已经存在于字典里,则不插入。其中,第二预设值例如为M1,例如为1。

如果MATCH_LOOKUP字典里存在与这个关键词集合相同的子集,换句话说(关键词集合(整数),0)存在于字典中,则不插入,并将(关键词集合(整数),0)对应的字典中的文章数量修改成第四预设值,例如为None,因为这表示当前的关键词集合不可以唯一指向单一文章。需要注意的是,不可以将其从字典中删除,这是因为考虑到子集的重复性,这个子集可能在后面还会出现。其中,第二预设值例如为0。

如果以上两种情况都不存在,则将这个第一子集和其对应的文章的索引值插入到MATCH_LOOKUP字典里,即该子集可以唯一指向该单一文章,即将第一子集对应的索引信息、第二预设值与第三数据的索引值之间的对应关系插入,此时第二预设值例如为M2,例如为0。

上述实施方式中,通过将第一子集对应的索引信息、第二预设值,以及第一数据对应的索引值进行存储,空间复杂度较低,而且能够提高查询的效率。

(b)插入到NEXT_TAGS_LOOKUP字典里

在一实施例中,该方法还包括:

根据所述第一子集对应的索引信息,以及所述第一数据的关键词集合对应的索引信息,确定第二关键词集合对应的索引信息;

若所述第一对应关系中不存在所述第一子集对应的索引信息,则将所述第一子集对应的索引信息以及所述第二关键词集合对应的索引信息之间的对应关系插入所述第一对应关系中;

若所述第一对应关系中存在所述第一子集对应的索引信息,则根据所述第二关键词集合对应的索引信息,将所述第一对应关系中第三关键词集合对应的索引信息进行更新,所述第三关键词集合为所述第一对应关系中所述第一子集对应的关键词集合。

具体的,假设已经得到这个关键词集合全集对应的索引信息,如整数值,而且在递归中,可以计算当前第一子集对应的索引信息,如整数值。为了获得当前子集对应的“下一组关键词”集合(即第二关键词集合),根据关键词集合全集对应的索引信息以及第一子集对应的索引信息,得到第二关键词集合对应的索引信息,即下一组关键词集合对应的索引信息,例如对上面两个数值做异或运算,得到下一组关键词集合对应的索引信息。然后尝试将子集和“下一组关键词”集合插入到NEXT_TAGS_LOOKUP中。

确定NEXT_TAGS_LOOKUP字典中是否存在第一子集对应的索引信息;

如果当前第一子集不存在于NEXT_TAGS_LOOKUP字典,直接进行插入,即将第一子集对应的索引信息以及第二关键词集合对应的索引信息之间的对应关系插入。

如果当前第一子集已经存在于NEXT_TAGS_LOOKUP字典中,需要将字典里该第一子集对应的下一组关键词集合对应的索引信息和要插入的下一组关键词集合对应的索引信息做合并,即对字典里该第一子集对应的下一组关键词集合对应的索引信息更新。

上述实施方式中,通过将第一子集对应的索引信息以及第二关键词集合对应的索引信息进行存储,空间复杂度较低,而且能够提高查询的效率。

示例性的,假设每一篇文章的内嵌关键词集合具有唯一性,有如下四个文章:

表6

定义关键词对应的索引,A:0,B:1,C:2,D:3,E:4,…,如表1所示。

文章S1对应的关键词集合对应的索引信息的整数值就是2

文章S2对应的关键词集合对应的索引信息的整数值就是2

文章S3对应的关键词集合对应的索引信息的整数值就是2

文章S4对应的关键词集合对应的索引信息的整数值就是2

文章对应的索引值如表4所示。

以文章S2为例,介绍前面两个字典MATCH_LOOKUP和NEXT_TAGS_LOOKUP的存储逻辑。S2对应的关键词集合为{A,B,C},通过二进制的位计算得到{A,B,C}的全部子集,即{A,B,C}、{A,B}、{A,C}、{B,C}、{A}、{B}、{C},依次循环处理该些子集。

以下以处理子集{A,B}为例进行说明:

对于字典NEXT_TAGS_LOOKUP来说:

将{A,B,C}与{A,B}对应的二进制值做异或运算,即111异或11得到100(即{C}),所以{A,B}对应的下一组关键词集合是{C},如果{A,B}不存在于NEXT_TAGS_LOOKUP中,则直接将将{A,B}与{C}的关联关系存入

NEXT_TAGS_LOOKUP。例如表7所示:

表7

如果{A,B}存在于NEXT_TAGS_LOOKUP中,将字典里该子集对应的数值和要插入的数值做合并。例如合并之前存储的{A,B}如表8所示,合并之后存储的{A,B}如表9所示:

表8

表9

对于字典MATCH_LOOKUP来说:

(1)如果({A,B},1)存在于MATCH_LOOKUP中,即完全匹配,则不做任何操作,继续处理下一组关键词。

(2)如果({A,B},0)存在于MATCH_LOOKUP中,则将字典中{A,B}对应的值改为None,因为这表示当前的关键词集合不可以唯一指向单一文章,然后继续处理下一组关键词。例如,如表10所示:

表10

如果以上(1)和(2)都不成立,即唯一指向单一文章,则将{A,B}和对应的文章的索引值插入到MATCH_LOOKUP中。例如,如表11所示:

表11

依次循环处理关键词集合{A,B,C}剩余的其他子集,所有关联关系都插入到MATCH_LOOKUP和NEXT_TAGS_LOOKUP中,完成存储数据的准备工作。

上述实施方式中,存储的对应关系,空间复杂度较低,而且能够提高查询的效率。

图5为本申请实施例提供的数据查询装置的结构示意图,如图5所示,本实施例的数据查询装置,包括:

获取模块110,用于获取用户输入的第一关键词集合,以及所述第一关键词集合对应的第一索引信息,所述第一索引信息为根据所述第一关键词集合中的关键词的索引得到的;

确定模块111,用于若确定所述第一关键词集合对应的查询结果的数量不是第一预设值,则根据所述第一索引信息以及第一对应关系,确定第二关键词集合;所述第一对应关系包括:所述第一索引信息与所述第二关键词集合对应的第二索引信息之间的对应关系;

处理模块112,用于根据所述第二关键词集合以及第二对应关系,确定所述第二关键词集合对应的目标查询结果;所述第二对应关系包括:索引信息与查询结果的索引值之间的对应关系。

在一种可能的实现方式中,所述第二对应关系为所述索引信息和第二预设值,与查询结果的索引值的对应关系,所述第二预设值用于表示所述关键词集合与对应的查询结果完全匹配,或所述关键词集合对应单一的查询结果或非单一的查询结果,所述确定模块111具体用于:

根据所述第二对应关系以及所述第一关键词集合对应的第一索引信息,确定所述第一关键词集合对应的第二预设值;

根据所述第一关键词集合对应的第二预设值,确定所述第一关键词集合对应的查询结果的数量。

在一种可能的实现方式中,所述确定模块111具体用于:

若所述第二预设值为M1,则确定所述第一关键词集合对应的查询结果的数量不是第一预设值;M1为整数,或,

若所述第二预设值为M2,且所述查询结果对应的索引值不等于单一查询结果的索引值,则确定所述第一关键词集合对应的查询结果的数量不是第一预设值;其中,M2不等于M1。

在一种可能的实现方式中,所述确定模块111具体用于:

根据所述第一索引信息以及第一对应关系,确定所述第二关键词集合对应的第二索引信息;

根据所述第二索引信息,确定所述第二关键词集合。

在一种可能的实现方式中,所述处理模块112具体用于:

根据所述第二关键词集合以及第二对应关系,确定所述第二关键词集合对应的目标查询结果的索引值;

根据所述第二关键词集合对应的目标查询结果的索引值,确定所述第二关键词集合对应的目标查询结果。

在一种可能的实现方式中,所述获取模块110具体用于:

对于所述第一关键词集合中的任一关键词来说,确定以a为底数,以所述关键词的索引为幂的指数函数的值;a为大于1的整数

将所述第一关键词集合中各个关键词对应的指数函数的值之和,作为所述第一关键词集合对应的第一索引信息。

在一种可能的实现方式中,所述获取模块110还用于:

获取至少一个第一数据,以及各个所述第一数据的关键词集合;

对于任一所述第一数据的关键词集合,获取所述第一数据的关键词集合对应的索引信息;

获取所述第一数据的关键词集合的至少一个第一子集,以及各个第一子集对应的索引信息;

所述处理模块112具体用于:

根据各个所述第一数据的关键词集合对应的索引信息,对各个所述第一子集对应的索引信息以及对应第一数据的索引值之间的对应关系进行存储。

在一种可能的实现方式中,所述处理模块112具体用于:

若所述第一子集与第二数据的关键词集合相同,则将所述第一子集对应的索引信息、第二预设值与所述第二数据的索引值之间的对应关系,插入所述第二对应关系中;其中,所述第一数据包括所述第二数据;

若所述第一子集为第三数据的关键词集合的第二子集,则确定所述第二对应关系中是否存在所述第一子集对应的索引信息,与第二预设值之间的对应关系;

若是,且所述第二预设值为M2,则将所述第二对应关系中所述第一子集对应的索引信息的对应关系中第三数据的数量修改为第四预设值;

若否,则将所述第一子集对应的索引信息、第二预设值与所述第三数据的索引值之间的对应关系,插入所述第二对应关系中;其中,所述第一数据包括所述第三数据。

在一种可能的实现方式中,所述处理模块112还用于:

根据所述第一子集对应的索引信息,以及所述第一数据的关键词集合对应的索引信息,确定第二关键词集合对应的索引信息;

若所述第一对应关系中不存在所述第一子集对应的索引信息,则将所述第一子集对应的索引信息以及所述第二关键词集合对应的索引信息之间的对应关系插入所述第一对应关系中;

若所述第一对应关系中存在所述第一子集对应的索引信息,则根据所述第二关键词集合对应的索引信息,将所述第一对应关系中第三关键词集合对应的索引信息进行更新,所述第三关键词集合为所述第一对应关系中所述第一子集对应的关键词集合。

在一种可能的实现方式中,若所述第一子集与第二数据的关键词集合相同,所述第二预设值为M1;

若所述第一子集为第三数据的关键词集合的第二子集,且所述第二对应关系中不存在所述第一子集对应的索引信息,与第二预设值之间的对应关系,所述第二预设值为M2。

本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图6为本申请实施例提供的电子设备的结构示意图,如图6所示,该电子设备包括:

处理器210,以及,用于存储处理器210的可执行指令的存储器211。

可选的,还可以包括:通信接口212,用于实现与其他设备的通信。

上述部件可以通过一条或多条总线进行通信。

其中,处理器210配置为经由执行所述可执行指令来执行前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,此处不再赘述。

本申请实施例中还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现前述方法实施例中对应的方法,其具体实施过程可以参见前述方法实施例,其实现原理和技术效果类似,此处不再赘述。

本申请实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如前述方法实施例中任一项所述的方法,其具体实施过程可以参见前述方法实施例,其实现原理和技术效果类似,此处不再赘述。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。

相关技术
  • 数据存储方法和装置、数据查询方法和装置、数据结构、电子设备及计算机可读存储介质
  • 数据查询方法、数据查询装置、电子设备及存储介质
技术分类

06120112361801