索引生成方法、装置、存储介质及电子设备与流程

文档序号:33503229发布日期:2023-03-17 22:44阅读:23来源:国知局
索引生成方法、装置、存储介质及电子设备与流程

1.本公开涉及索引技术领域,具体地,涉及一种索引生成方法、装置、存储介质及电子设备。


背景技术:

2.在服务平台与各业务方之间的进行数据交互时,各业务方的业务数据定义一般各不相同且经常会随着业务方的实际需求而发生变化,因此需要保证服务平台存储的业务数据定义随着业务定义而同步变化的能力。在业务方使用protobuf定义主要的数据格式的情况下,服务平台方通常需要建立对业务方的业务数据定义中各个字段的索引,以便快速搜索数据记录。现有技术中一般都通过手动对protobuf定义文件中的各字段建立索引,但人工误差大,容易出现遗漏或错误,从而导致索引与protobuf定义的字段不对应,而全量建立索引也即将protobuf定义中的所有字段都建立索引或者不配置任何索引字段分别会带来过多的性能开销和查询效率低下的问题。


技术实现要素:

3.本公开的目的是提供一种索引生成方法、装置、存储介质及电子设备,能够根据该protobuf定义文件中的目标注解来自动进行索引的生成,相比于直接人工手动对索引进行配置,不仅不会出现索引字段与protobuf定义文件中的字段名不同而无法进行索引的情况,保证了索引字段的准确性,而且还能够保证不会出现漏生成部分字段的索引或多生成部分字段的索引的问题,并且还能够满足按需索引的需求,可靠性和配置效率大大提高。
4.为了实现上述目的,本公开提供一种索引生成方法,所述方法包括:
5.遍历protobuf定义文件中的所有字段;
6.将包括目标注解的字段作为第一字段保存于第一列表中;
7.根据所述第一列表中的所包括的字段确定索引字段列表,并根据所述索引字段列表配置索引。
8.可选地,所述根据所述第一列表中的所包括的字段确定索引字段列表,并根据所述索引字段列表配置索引包括:
9.获取当前存储的索引中所包括的索引字段列表作为第二列表;
10.在所述第二列表与所述第一列表之间存在字段元素差异的情况下,将所述第一列表作为更新后的索引字段列表,并根据所述更新后的索引字段列表配置所述索引。
11.可选地,所述根据所述第一列表中的所包括的字段确定索引字段列表,并根据所述索引字段列表配置索引包括:
12.在所述第一列表不为空的情况下,根据所述第一列表中的所包括的字段确定所述索引字段列表,并根据所述索引字段列表配置索引。
13.可选地,所述遍历protobuf定义文件中的所有字段包括:
14.在包括所述protobuf定义文件的系统初始化时,遍历所述protobuf定义文件中的
所有字段。
15.可选地,所述目标注解为通过限定修饰符optional定义在所述protobuf定义文件中。
16.本公开还提供一种索引生成装置,所述装置包括:
17.遍历模块,用于遍历protobuf定义文件中的所有字段;
18.保存模块,用于将包括目标注解的字段作为第一字段保存于第一列表中;
19.配置模块,用于根据所述第一列表中的所包括的字段确定索引字段列表,并根据所述索引字段列表配置索引。
20.可选地,所述配置模块包括:
21.获取子模块,用于获取当前存储的索引中所包括的索引字段列表作为第二列表;
22.第一配置子模块,用于在所述第二列表与所述第一列表之间存在字段元素差异的情况下,将所述第一列表作为更新后的索引字段列表,并根据所述更新后的索引字段列表配置所述索引。
23.可选地,所述配置模块包括:
24.第二配置子模块,用于在所述第一列表不为空的情况下,根据所述第一列表中的所包括的字段确定所述索引字段列表,并根据所述索引字段列表配置索引。
25.本公开还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以上所述方法的步骤。
26.本公开还提供一种电子设备,包括:
27.存储器,其上存储有计算机程序;
28.处理器,用于执行所述存储器中的所述计算机程序,以实现以上所述方法的步骤。
29.通过上述技术方案,能够根据该protobuf定义文件中的目标注解来自动进行索引的生成,相比于直接人工手动对索引进行配置,不仅不会出现索引字段与protobuf定义文件中的字段名不同而无法进行索引的情况,保证了索引字段的准确性,而且还能够保证不会出现漏生成部分字段的索引或多生成部分字段的索引的问题,并且还能够满足按需索引的需求,可靠性和配置效率大大提高。
30.本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
31.附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
32.图1是根据本公开一示例性实施例示出的一种索引生成方法的流程图。
33.图2是根据本公开又一示例性实施例示出的一种索引生成方法的流程图。
34.图3是根据本公开一示例性实施例示出的一种索引生成装置的结构框图。
35.图4是根据本公开又一示例性实施例示出的一种索引生成装置的结构框图。
36.图5是根据一示例性实施例示出的一种电子设备的框图。
37.图6是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
38.以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
39.图1是根据本公开一示例性实施例示出的一种索引生成方法的流程图。如图1所示,所述方法包括步骤101至步骤103。
40.在步骤101中,遍历protobuf定义文件中的所有字段。
41.在步骤102中,将包括目标注解的字段作为第一字段保存于第一列表中。
42.在步骤103中,根据所述第一列表中的所包括的字段确定索引字段列表,并根据所述索引字段列表配置索引。
43.该protobuf定义文件也即后缀为.proto的定义文件,用于描述业务中需要使用的一个和多个消息的数据结构,各消息的数据结构中通常都包括多个字段,如下方给出的示例:
44.message person{
45.required stringname=1[(fieldstore)=es_index];
[0046]
required int32 id=2;
[0047]
required stringemail=3;
[0048]
}
[0049]
其中,person即为一个消息的数据结构,包括name,id,email三个字段,[(fieldstore)=es_index]即为对于字段name的注释。
[0050]
该目标注解即可以为上述示例中的(fieldstore)=es_index。
[0051]
其中,该目标注解可以在该protobuf定义文件中额外进行相关的定义来得到。定义的方式可以为例如,先在该protobuf定义文件中定义一个enum枚举类型的类,用于描述该目标注解中的es_index的含义,示例代码可以如下所示:
[0052]
enum playbackfieldstore{
[0053]
es_index=1;
[0054]
no_es_index=2;
[0055]
},
[0056]
如上述示例所示,在定义该目标注解的值时,不仅可以对该目标注解中的es_index进行定义,还可以对no_es_index进行定义,es_index可以表征有索引,no_es_index可以表征没有索引。
[0057]
然后,可以通过在protobuf支持的google.protobuf.fieldoptions类中增加对该目标注解的注解名的定义,示例代码可以如下所示:
[0058]
extend google.protobuf.fieldoptions{
[0059]
optional playbackfieldstore fieldstore=1[default=no_es_index];
[0060]
}
[0061]
如上述示例所示,通过protobuf支持的google.protobuf.fieldoptions类中增加限定符为optional、所述类型为laybackfieldstore、且名称为fieldstore的对象的定义,就能够成功将该目标注解定义在该protobuf定义文件中。
[0062]
其中,上述示例中的注解default=no_es_index结合前述对playbackfieldstore
的定义,即可以表征在该protobuf定义文件中的各字段中不包括该名为fieldstore的注解时,可以认为该字段没有索引。
[0063]
另外,由于限定修饰符optional表示对应的字段是一个可选字段,也即对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。因此,通过限定修饰符optional来定义该注解名,能够在对该protobuf定义文件中标注各个字段是否需要索引时,无需对每一个字段都添加相关的注解,可以仅在需要添加索引的字段中添加该目标注解,从而能够大大简化标注的复杂度。
[0064]
在protobuf定义文件中对该目标注解都定义好之后,便可以按照需求,在protobuf定义文件中在需要添加索引的字段中添加该目标注解,进而生成带有该目标注解的protobuf定义文件。
[0065]
在建立索引时,则可以如上述步骤101中所示,对该protobuf定义文件中所包括的所有字段都进行遍历,以确定包括该目标注解的字段。
[0066]
其中,该protobuf定义文件中可以有包括该目标注解的字段,也可以没有包括该目标注解的字段,需要根据索引的建立需求确定。若该protobuf定义文件中含有包括该目标注解的字段,便可以如上述步骤102中所示,将包括目标注解的字段作为第一字段保存于第一列表中。若该protobuf定义文件中不含有包括该目标注解的字段,则该第一列表为空,可以在判断该第一列表为空的情况下直接结束流程。
[0067]
接着,如上述步骤103中所示,便可以直接根据所述第一列表中的所包括的字段来确定索引字段列表,并根据所述索引字段列表配置索引。
[0068]
通过上述技术方案,能够根据该protobuf定义文件中的目标注解来自动进行索引的生成,相比于直接人工手动对索引进行配置,不仅不会出现索引字段与protobuf定义文件中的字段名不同而无法进行索引的情况,保证了索引字段的准确性,而且还能够保证不会出现漏生成部分字段的索引或多生成部分字段的索引的问题,并且还能够满足按需索引的需求,可靠性和配置效率大大提高。
[0069]
图2是根据本公开又一示例性实施例示出的一种索引生成方法的流程图。如图2所示,所述方法包括步骤201至步骤203。
[0070]
在步骤201中,在包括所述protobuf定义文件的系统初始化时,遍历所述protobuf定义文件中的所有字段。
[0071]
在步骤202中,获取当前存储的索引中所包括的索引字段列表作为第二列表。
[0072]
在步骤203中,判断所述第二列表与所述第一列表之间是否存在字段元素差异,若有则转至步骤204,若无,则转至步骤201。
[0073]
在步骤204中,也即在所述第二列表与所述第一列表之间存在字段元素差异的情况下,将所述第一列表作为更新后的索引字段列表,并根据所述更新后的索引字段列表配置所述索引。
[0074]
包括该protobuf定义文件的系统可以为例如业务方或数据服务平台中的任意一个系统,任意系统初始化时,都会对其中包括的所有protobuf定义文件进行如上述步骤201所示的遍历,以保证系统中的索引能够随时与protobuf定义文件中的保持一致。
[0075]
当前存储的索引中所包括的索引字段列表可以直接从索引文件中获取得到。
[0076]
在得到当前已生成的索引字段所在的该第二列表之后,在根据该第一列表生成索
引之前,可以先对该第一列表和该第二列表进行比较,若该第一列表和该第二列表中所包括的字段完全一致,则表征该protobuf定义文件中的需要进行索引的字段没有在上一次生成索引之后发生变化,因此,可以无需再次对索引进行生成。而在所述第二列表与所述第一列表之间存在字段元素差异的情况下,则表征该protobuf定义文件中的需要进行索引的字段在上一次生成索引之后发生了变化,因此需要根据该第一列表中的最新的需要索引的字段信息来对索引重新进行生成,以实现根据该protobuf定义文件的更新对索引也进行实时更新的目的。
[0077]
如前述中所描述,在获取该第一列表时,若该protobuf定义文件中不含有包括该目标注解的字段,则该第一列表为空,可以在判断该第一列表为空的情况下直接结束流程。或者,在本实施例中,在判断该第一列表为空的情况下,可以转至该步骤201,继续等待在系统初始化时对该protobuf定义文件进行遍历。
[0078]
在一种可能的实施方式中,在根据所述第一列表中的所包括的字段确定索引字段列表,并根据所述索引字段列表配置索引时,还可以再次对该第一列表是否为空进行判断,从而,进一步保证避免将空的字段列表确定为该索引字段列表后对索引进行配置。
[0079]
在一种可能的实施方式中,该索引可以为es索引(elasticsearch)。
[0080]
图3是根据本公开一示例性实施例示出的一种索引生成装置的结构框图。如图3所示,所述装置包括:遍历模块10,用于遍历protobuf定义文件中的所有字段;保存模块20,用于将包括目标注解的字段作为第一字段保存于第一列表中;配置模块30,用于根据所述第一列表中的所包括的字段确定索引字段列表,并根据所述索引字段列表配置索引。
[0081]
图4是根据本公开又一示例性实施例示出的一种索引生成装置的结构框图。如图4所示,所述配置模块30包括:获取子模块301,用于获取当前存储的索引中所包括的索引字段列表作为第二列表;第一配置子模块302,用于在所述第二列表与所述第一列表之间存在字段元素差异的情况下,将所述第一列表作为更新后的索引字段列表,并根据所述更新后的索引字段列表配置所述索引。
[0082]
在一种可能的实施方式中,如图4所示,所述配置模块30包括:第二配置子模块303,用于在所述第一列表不为空的情况下,根据所述第一列表中的所包括的字段确定所述索引字段列表,并根据所述索引字段列表配置索引。
[0083]
在一种可能的实施方式中,所述遍历模块10还用于:在包括所述protobuf定义文件的系统初始化时,遍历所述protobuf定义文件中的所有字段。
[0084]
在一种可能的实施方式中,所述目标注解为通过限定修饰符optional定义在所述protobuf定义文件中。
[0085]
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0086]
图5是根据一示例性实施例示出的一种电子设备500的框图。如图5所示,该电子设备500可以包括:处理器501,存储器502。该电子设备500还可以包括多媒体组件503,输入/输出(i/o)接口504,以及通信组件505中的一者或多者。
[0087]
其中,处理器501用于控制该电子设备500的整体操作,以完成上述的索引生成方法中的全部或部分步骤。存储器502用于存储各种类型的数据以支持在该电子设备500的操作,这些数据例如可以包括用于在该电子设备500上操作的任何应用程序或方法的指令,以
及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器502可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(static random access memory,简称sram),电可擦除可编程只读存储器(electrically erasable programmable read-only memory,简称eeprom),可擦除可编程只读存储器(erasable programmable read-only memory,简称eprom),可编程只读存储器(programmable read-only memory,简称prom),只读存储器(read-only memory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件503可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器502或通过通信组件505发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口504为处理器501和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件505用于该电子设备500与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(near field communication,简称nfc),2g、3g、4g、nb-iot、emtc、或其他5g等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件505可以包括:wi-fi模块,蓝牙模块,nfc模块等等。
[0088]
在一示例性实施例中,电子设备500可以被一个或多个应用专用集成电路(application specific integrated circuit,简称asic)、数字信号处理器(digital signal processor,简称dsp)、数字信号处理设备(digital signal processing device,简称dspd)、可编程逻辑器件(programmable logic device,简称pld)、现场可编程门阵列(field programmable gate array,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的索引生成方法。
[0089]
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的索引生成方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器502,上述程序指令可由电子设备500的处理器501执行以完成上述的索引生成方法。
[0090]
图6是根据一示例性实施例示出的一种电子设备600的框图。例如,电子设备600可以被提供为一服务器。参照图6,电子设备600包括处理器622,其数量可以为一个或多个,以及存储器632,用于存储可由处理器622执行的计算机程序。存储器632中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器622可以被配置为执行该计算机程序,以执行上述的索引生成方法。
[0091]
另外,电子设备600还可以包括电源组件626和通信组件650,该电源组件626可以被配置为执行电子设备600的电源管理,该通信组件650可以被配置为实现电子设备600的通信,例如,有线或无线通信。此外,该电子设备600还可以包括输入/输出(i/o)接口658。电子设备600可以操作基于存储在存储器632的操作系统,例如windows server
tm
,mac os x
tm
,unix
tm
,linux
tm
等等。
[0092]
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的索引生成方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器632,上述程序指令可由电子设备600的处理器622执行
以完成上述的索引生成方法。
[0093]
在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的索引生成方法的代码部分。
[0094]
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
[0095]
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
[0096]
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1