CN103123638B - 数据搜索方法和装置 - Google Patents
数据搜索方法和装置 Download PDFInfo
- Publication number
- CN103123638B CN103123638B CN201110372084.8A CN201110372084A CN103123638B CN 103123638 B CN103123638 B CN 103123638B CN 201110372084 A CN201110372084 A CN 201110372084A CN 103123638 B CN103123638 B CN 103123638B
- Authority
- CN
- China
- Prior art keywords
- attribute
- searching code
- searching
- code
- tree construction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种数据搜索方法和装置,能够提高搜索速率和系统资源的利用率,实现搜索结果的高速反馈。本发明实施例提供的一种数据搜索方法包括:为具有预定属性的数据集合生成搜索代码,每一搜索代码对应于一个数据集合;根据接收到的搜索请求匹配得到所需的搜索代码;利用匹配得到的搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种数据搜索方法和装置。
背景技术
随着互联网的发展和各类互联网产品的普及使用,互联网中存储了越来越多的信息,如何快速实现信息查找已成为当前研究的一个热点。
例如,在即时通信(Instant Messaging,IM)软件中,好友关系的扩大成为IM产品推广用户的一个重要手段,而好友的查找和添加是扩大好友关系的基础。
现有的IM产品在进行好友查找时,通常是通过查找IM服务器的数据库来实现的。利用好友的手机号码或者即时通信号码作为查询条件,数据库中为这些查询条件设置了结构化查询语言(Structured Query Language,SQL)索引,在数据库中进行SQL查询找到所需添加的好友。
然而,现有的这种数据搜索方法,至少存在如下缺点:
现有在数据库搜索好友时,仅将好友的手机号码或者即时通信号码作为查询条件;虽然用户的基本信息都是存储在数据库中的,其中包括了大量用户的属性信息,如性别、区域、年龄等,然而由于现有的数据库中不会为这些属性信息设置索引,将这些属性信息直接作为数据库的查询字段时查询效率也十分低下,在数据库的层面通过SQL查询以支撑IM前端大量用户的在线查询是可不行的,导致无法有效利用这些信息,造成了资源的浪费。
现有的数据搜索方案所支持的搜索条件过于单一,搜索方式过于固定,无法满足用户需求;且由于数据库中的数据量通常十分庞大,数据搜索速度不高,搜索结果的反馈也非常缓慢。
发明内容
本发明提供的数据搜索方法和装置,实现了一种基于属性的无索引数据搜索方案,能够提高搜索速率和系统资源的利用率,实现搜索结果的高速反馈。
为达到上述目的,本发明实施例采用了如下技术方案:
本发明实施例提供的一种数据搜索方法,包括:
为具有预定属性的数据集合生成搜索代码,每一搜索代码对应于一个数据集合;
根据接收到的搜索请求匹配得到所需的搜索代码;
利用匹配得到的搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果。
本发明实施例提供的一种数据搜索装置,包括:
搜索关系建立单元,用于为具有预定属性的数据集合生成搜索代码,每一搜索代码对应于一个数据集合;
搜索条件匹配单元,用于根据接收到的搜索请求匹配得到所需的搜索代码;
搜索结果返回单元,用于利用匹配得到的搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果。
本发明实施例的有益效果是:
本发明实施例提供了一种基于数据的属性信息进行数据搜索的新型方案,通过根据属性信息的特点为相应的数据集合设置搜索代码,并利用搜索代码获取所需的搜索结果等技术手段,实现了一种基于属性的无索引数据搜索方案。
本方案能够有效利用数据自身的属性信息进行数据的搜索,大大扩宽了搜索条件的可选范围,提高了数据搜索的灵活性和系统资源的利用率;并且,本方案可以在内存中实现数据的搜索,解决了直接访问庞大的数据库所造成的搜索速度较低、搜索结果反馈缓慢的问题,提高了搜索速率,实现了搜索结果的高速反馈。
附图说明
图1为本发明实施例一提供的一种数据搜索方法流程示意图;
图2为本发明实施例二提供的一种树结构示意图;
图3为本发明实施例三提供的一种数据搜索装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本方案的主要构思在于利用数据的属性信息和内存的需求设置合理的搜索代码(表示为Key),并利用Key和数据集合(表示为List)构成一种Key-List的内存结构,在内存中实现基于属性的无索引数据搜索。
本方案能够应用在包括即时通信中好友搜索场景在内的多种数据搜索场景中。
参见图1,为本发明实施例一提供的数据搜索方法流程示意图,包括如下处理:
11:服务器预先为具有预定属性的数据集合生成搜索代码,每一搜索代码对应于一个数据集合;
当接收到搜索请求时,执行以下步骤:
12:服务器根据接收到的搜索请求匹配得到所需的搜索代码;
搜索查询请求传递的是内存中Key-List结构中的Key,其约定与内存的Key约定必须保持一致。就是说,通过比对搜索请求中的key与服务器中的key表中是否有一样的key来判断是否执行当前搜索。
搜索请求中传递的Key可以与内存中的已存储的Key是完全相同的数值,也可以不同的数值,此时能够根据搜索请求中传递的Key值得到内存中存储的Key的信息。实际应用中,因为有些搜索条件可能是“不限”,通过对接收到的搜索请求进行匹配可以得到一个或多个所需的搜索代码,即Key-List内存中的多个Key符合查询条件,可以使用正则表达式等方法快速的进行匹配,找到符合搜索条件的Key列表,然后进行结果返回。
例如,对于上述第一种方式生成的Key,搜索请求中可以直接包括搜索代码,如113220,或者,搜索请求中包括对应于Key的信息,如113XX0,则对113XX0进行匹配时,113XX0包括遍历XX所有取值的多个Key。
13:服务器利用所述搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果。
进一步的,在上述步骤11中可以至少通过如下两种方式生成搜索代码:为每个预定属性设置至少一位属性代码,将所述预定属性的各属性代码排序后生成所述搜索代码;或者,利用所述预定属性和相应的属性内容形成树结构,所述树结构中每一层中的节点对应于一个属性的属性内容;将所述树结构中的所有节点按预设规则编码(比如从上至下按照顺序编号);将树底层的编号作为相应数据集合的搜索代码。
本发明实施例提供了一种基于数据的属性信息进行数据搜索的新型方案,通过根据属性信息的特点为相应的数据集合设置搜索代码,并利用搜索代码获取所需的搜索结果等技术手段,实现了一种基于属性的无索引数据搜索方案。
本方案能够有效利用数据自身的属性信息进行数据的搜索,大大扩宽了搜索条件的可选范围,提高了数据搜索的灵活性和系统资源的利用率;并且,本方案可以在内存中实现数据的搜索,解决了直接访问庞大的数据库所造成的搜索速度较低、搜索结果反馈缓慢的问题,提高了搜索速率,实现了搜索结果的高速反馈。
下面对本发明实施例二提供的数据搜索方法进行具体说明。
11:服务器为具有预定属性的数据集合生成搜索代码(Key),每一搜索代码对应于一个数据集合(List)。
优选的,本方案将搜索代码和数据集合存储在内存中,形成一个Key-List的内存结构,而不将这些数据直接存储在数据库中;在搜索数据时,在内存中进行数据搜索,从而避免了与数据库直接进行数据交互,提高了数据搜索和搜索结果返回的速度。
Key为对用户数据的供搜索的属性生成的一个代码值,List为符合这个Key的所有的用户数据的集合,List为这些用户数据的唯一标识(ID)。用户在该内存中的数据由用户第一次登陆时进行录入,对用户的属性修改时可以进行旧属性Key-List的删除和新属性Key-List的添加。
用户第一次登陆时录入是由服务器根据用户的登录信息自动录入的,例如,IM系统会在登陆环节获取登陆用户的所有信息,然后在登陆环节通知Key-List系统,系统会根据自身系统是否已经录入过该用户来决定用户是否为首次录入,若是首次录入则在内存中添加相应信息。
可以根据搜索属性的特点和内存的需求进行Key值的设计。在此,以在IM系统中搜索用户数据(如搜索好友)的场景为例说明,在该场景下,用户数据的属性可以包括性别(男,女,未知),区域(北京,上海,中国,辽宁,青岛),星座(填写,狮子。。),年龄段,在线状态等等。
在进行Key值的设计时,希望Key值尽量少的占用内存,本方案中以至多一个int型实现搜索代码,以用该搜索代码保存用户的所有供搜索属性。至少可以采用如下两种具体实现方式:
第一种方式
为每个预定属性设置至少一位属性代码,将所述预定属性的各属性代码排序后生成所述搜索代码。这种方式适合用户的供搜索属性数量较少的场景,多少的鉴定标准可以根据不同的需求自行设定,这里以搜索代码在整型取值范围内作为较佳实施场景为例:为每个预定属性设置至少一位属性代码,则用户的所有供搜索属性的属性代码顺接成的数值不超过整型取值范围时,属于属性数量较少的场景,否则,属于属性数量较多的场景。
例如,如果用户的供搜索字段只有性别,在线状态,年龄三个。性别的可选范围为男、女、未知三个,在线状态为在线、离线两个,年龄按实际的需求分成了5个年龄段,则这个用户的Key可以用一个三位数表示XYZ,X百位代表性别,取值范围为0、1、2;Y十位代表在线状态取值范围为0,1,Z个位代表年龄段,取值范围0~4。即为属性“性别”设置属性代码X,为属性“在线状态”设置属性代码Y,为属性“年龄段”设置属性代码Z,并为区域设置代码AAA,并将按照X-Y-Z-AAA的顺序将这些属性代码进行排序,生成搜索代码,如113220,其代表了性别为女,在线,属于第3年龄段,在区域220的所有用户的数据集合。
对每个属性可以设置一个或多个属性代码,当一个属性的属性内容较多时,例如,一个属性具有10个以上的可选项,则可以采用两位或两位以上的属性代码表示一个属性。
在这种方式下,当用户的预定属性发生变化时,可以通过如下处理更新所述搜索代码:
a)当加入新的属性时,为该新属性设置属性代码,并将该属性代码加入搜索代码中;例如,对上述搜索代码XYZ对应的数据集合中的数据添加一个新的属性“区域”,且该属性区域具有404个可选项时,则需要多加三位属性代码代表区域,属性Key就需要一个6位的数表示,从之前的XYZ更新为XYZRRR,前三位仍采用原来的属性代码,RRR三位在一起表示区域的属性代码。
b)当将已存在的属性删除时,在搜索代码中删除相应的属性代码。例如,对Key值为XYZRRR时,当删除属性“性别”时,将搜索代码从XYZRRR更新为YZRRR。
c)当属性的属性内容发生变化时,调整相应属性代码的取值范围。例如,对Key值为XYZRRR时,当属性“性别”的具体内容从{男,女,未知}变化为{男,女}时,属性代码X的取值范围从0-2调整为0-1,即这时“性别”属性仅包含了两个可选项。
对上述一个搜索代码中各属性代码具体排序方式,在此不进行严格限制,例如,对内存占用要求很严格的场景,甚至可以用排列组合的方式,通过一定的排序方式,将搜索代码范围控制在short类型等。
第二种方式
利用所述预定属性和相应的属性内容形成树结构,在树结构中每一层中的节点对应于一个属性的属性内容;将所述树结构中的所有节点按预设规则编码(比如从上至下按照顺序编号);将树底层的编号作为相应数据集合的搜索代码。
上述的预设规则编码可以为从上至下按照顺序编号,如图2中的树结构所示,本实施例中主要以按照从上至下按照顺序编号的场景为例进行说明。可以理解,根据实际需要上述的预设规则编码可以采用其他的方式,例如,也可以按照层号-各层内容标识等方式进行编码。应当注意的是,对树结构中的一个节点,按照不同规则编码得到的编号也不同,当树结构发生变化时,该节点在树结构变化前的编号和树结构变化后的编号之间的偏移量的数值及计算方式也必然不同。
如果用户的供搜索属性过多,利用第一种方式按位顺接各属性代码的话超过了一个int型表示数值范围,可以考虑改变属性代码的组织形式,以便进一步减少内存的占用,例如,采用本实施例提供的第二种方式。
参见图2,显示了本实施例二提供的一种树结构示意图。
树结构的顶部(上方)为根(root),将用户的每一个属性按树的顺序向下延伸,直到找到最后一层,最后一层的节点编号即为对应数据集合中各用户的搜索代码。树结构中的一层对应于一个属性,每一层中的各节点分别对应于该属性的具体属性内容,例如,参见图2,从root开始root层的序号为h0,性别层为h1,在线状态层为h2,依次类推。性别层h1具有三个节点,在线状态层h2具有6个节点,每层中的节点都代表对应属性的一个可选项。
若将每一层最后一个节点的编号表示为m,则r0为0,r1为3,r2为9。每一层的属性内容的可选项表示为SN时,S0=0,S1=3(男,女,未知),S2=2(在线,离线)。在组织这个树结构的时候,这些参数都可以在构建树的时候设置为初始值。
每一层按照顺序,每一个节点上都有一个编号,顺序到最后一层,也会有一个编号,参见图2,已经标注了每一个节点的顺序标注号码。若图2中的在线状态层即为树结构的底层时,则所得到搜索代码分别为4,5,6,7,8,9,每一搜索代码都对应了树结构中的一条唯一的路径,并与唯一的一个数据集合相对应,例如,搜索代码4,对应于树结构中节点0一节点1一节点4的路径,并且对应于具有{男,在线}属性的所有用户的数据集合。
这种方式下,当预定属性发生变化时,通过如下方式更新所述搜索代码:
当加入新的属性时,在树结构中为该新属性增设对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则重新编号,并将树底层的编号作为相应数据集合的搜索代码;或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码;该偏移量指示相关节点更新前的搜索代码与更新后的搜索代码之间偏移的数值。
当将已存在的属性删除时,在树结构中删除该属性的对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则重新编号,并将树底层的编号作为相应数据集合的搜索代码;或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码;该偏移量指示相关节点更新前搜索代码与更新后的搜索代码之间偏移的数值。
当属性自身的属性内容发生变化时,如当属性“性别”的具体内容从{男,女,未知}变化为{男,女}时,在树结构中调整该属性对应层中的节点数目,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则重新编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码,该偏移量指示相关节点更新前搜索代码与更新后的搜索代码之间偏移的数值。。
具体的,对于偏移量X,假如某一层的节点有5个值{A,B,C,D,E},若用户属性从A变为C,则X=2,从A变成E,则X=4,从E变为A,则X=-4,根据偏移量计算搜索代码的方式,具体处理如下:
例如,当用户的某一个属性变更时,可以根据属性所在层数和节点前后变动的顺序差(即偏移量X),按照如下公式求得该用户属性所对应的新叶子节点的编号,即用户的搜索代码更新为:
Y2=Y1+X*S[N+1]*S[N+2]…*S[M]
在上式中,树结构有M层,第N层的属性发生变更,偏移量为X,原来对应的搜索代码为Y1,变更后用户的搜索代码Y2,S标示层号。
对于上式,由图2中的树结构所示,对节点按照从上至下的顺序进行编号,则一层节点的标号变化时,必然导致后续节点标号变化,所以利用X*S[N+1]*S[N+2]…*S[M]求出更新后树结构底层节点的编号相对于更新前树结构底层节点的编号的总偏移量,S[N+1]为第N+1层中有S[N+1]个节点与第N层中一个节点相对应。然后再利用偏移量加上更新前树结构底层节点的编号即得到更新后树结构底层节点的编号,也就是树结构更新后相应数据集合的搜索代码。
优选的,将用户一般不会变更的属性,如性别,年龄段放在树的上层,将经常容易变更的属性如在线状态放在树的下层,这样会降低运算时间。即当第一属性发生变化的概率小于第二属性发生变化的概率时,在树结构中第一属性的对应层位于第二属性对应层的上方。
相比于第一种方式,按照上述第二种方式可以大大扩宽可供搜索的属性数量,例如,如果用户的所有供搜索属性都只有两个可选项,类似在线状态的在线和离线,且所生成的Key值采用int型数据表示时,当采用第一种方式组建key时,最多可以表示10个属性,当采用第二种方式组建key时,可以表示32个属性。
当接收到搜索请求时,执行以下步骤:
12:服务器根据接收到的搜索请求匹配得到所需的搜索代码。
搜索查询请求传递的是内存中Key-List结构中的Key,其约定与内存的Key约定必须保持一致。就是说,通过比对搜索请求中的key与服务器中的key表中是否有一样的key来判断是否执行当前搜索。
搜索请求中传递的Key可以与内存中的已存储的Key是完全相同的数值,也可以不同的数值,此时能够根据搜索请求中传递的Key值得到内存中存储的Key的信息。实际应用中,因为有些搜索条件可能是“不限”,通过对接收到的搜索请求进行匹配可以得到一个或多个所需的搜索代码,即Key-List内存中的多个Key符合查询条件,可以使用正则表达式等方法快速的进行匹配,找到符合搜索条件的Key列表,然后进行结果返回。
例如,对于上述第一种方式生成的Key,搜索请求中可以直接包括搜索代码,如113220,或者,搜索请求中包括对应于Key的信息,如113XX0,则对113XX0进行匹配时,113XX0包括遍历XX所有取值的多个Key。
13:服务器利用匹配得到的搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果。
需要说明的是,一个Key对应一个list,一个list就是一个集合,所有是这个key的属性的用户都在这个集合里。
进一步的,搜索代码和数据集合标识之间具有哈希映射关系,从而能够根据Key快速查找到相应的List。
例如,当分页存储List时,根据Key的哈希值(hashcode),得到内容所存放的页数,如326页,则直接在326页存储内容,或者在326页查找内容,从而避免了遍历所有的List,提高的查询速率。
对于所述数据集合List部分,优选的,也采用哈希集合(HashSet)结构存储该数据集合中的数据元素。这种处理方式,主要是考虑对于需要删除某个List中某一数据元素的场景,根据HashSet的结构能够快速定位并查找到符合某Key的List集合中的某一特定元素并将其删除。例如,在建立存储List部分的数据库时,数据库会自行为List集合中的各个元素分配一个唯一的标识(ID),利用哈希机制将该ID哈希映射至相应元素,则当需要删除某一特定数据元素时,利用该元素在数据库中ID即可查找到该特定元素。
随机性机制
在向搜索请求返回搜索结果时,可以根据需求,比如搜索结果的随机性等决定List中的数据队列是否需要排序。例如,当要求搜索结果具有随机性时,一种排序方式为:按照数据集合中数据元素在队列中顺序,从队列头部提取预定数目的数据元素作为所述搜索结果,并将已搜索过的数据元素转移至队列尾部。这种处理方式,保证了即使是相同的搜索请求所得到的搜索结果也是不同的,如按照同样的查询条件查询5次,能够得到不同的搜索结果,提高了用户体验。
缓存淘汰机制
由于通常可录入内存的用户数据会很多,但是搜索结果的返回量一般不会过于庞大,所以可以给Key-List结构中的List设置一个上限阈值,当超过这个阈值时需要进行一些相应数据的删除,这不仅是内存溢出的保护,也是一种变相的随机性的实现。
优选的,本方案中的缓存淘汰选用最近最少使用算法(Least Recently Used,LRU)实现。当数据集合中数据元素的数量超过上限阈值时,根据数据元素是否被搜索过或者数据元素被搜索过的次数删除相应数目的数据元素。例如,当List超过上限阈值时,删除没有被搜索过的数据,当List中所有元素都被搜索过时,删除被搜索次数最小的数据,即考虑这些数据的关注度较低,价值较小,可以删除。
可以理解,根据实际需要也可以删除已经搜索过的数据元素,或者,删除搜索次数为预定值的数据元素。
本发明实施例三还提供了一种数据搜索装置,参见图3,所述装置包括:
搜索关系建立单元31,用于为具有预定属性的数据集合生成搜索代码,每一搜索代码对应于一个数据集合;
搜索条件匹配单元32,用于根据接收到的搜索请求匹配得到所需的搜索代码;
搜索结果返回单元33,用于利用匹配得到的搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果。
进一步的,上述搜索关系建立单元31,具体用于为每个预定属性设置至少一位属性代码,将所述预定属性的各属性代码组合后生成所述搜索代码。
这时,当所述预定属性发送变化时,搜索关系建立单元31通过如下方式更新所述搜索代码:
当加入新的属性时,为该新属性设置至少一位属性代码标识该属性,并将该属性代码组合进搜索代码中;当将已存在的属性删除时,在搜索代码中删除相应的属性代码;当属性的属性内容发生变化时,调整相应属性代码的取值范围。
或者,上述搜索关系建立单元31,具体用于利用所述预定属性和相应的属性内容形成树结构,所述树结构中各节点内容对应于相应属性的属性内容;将所述树结构中的所有节点按预设规则进行编号;将树底层的编号作为相应数据集合的搜索代码。
这时,当所述预定属性发送变化时,搜索关系建立单元31通过如下方式更新所述搜索代码:
当加入新的属性时,在树结构中为该新属性增设对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则(如从上至下按照顺序)进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码;
当将已存在的属性删除时,在树结构中删除该属性的对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则(如从上至下按照顺序)进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码;
当属性的属性内容发生变化时,在树结构中调整该属性对应层中的节点数目,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则(如从上至下按照顺序)进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码。
进一步的,当第一属性发生变化的概率小于第二属性发生变化的概率时,在树结构中第一属性的对应层位于第二属性对应层的上方。
本实施例中,将所述搜索代码和数据集合存储在内存中,搜索代码和数据集合标识之间具有哈希映射关系,且所述数据集合采用哈希集合结构存储该数据集合中的数据元素。
进一步的,本方案中还包括排序单元,用于按照数据集合中数据元素在队列中顺序,从队列头部提取预定数目的数据元素作为所述搜索结果,并将已搜索过的数据元素转移至队列尾部。以及,删除单元,用于当数据集合中数据元素的数量超过上限阈值时,根据数据元素是否被搜索过或者数据元素被搜索过的次数删除相应数目的数据元素。
上述数据搜索装置可以在服务器上实现,例如,在IM服务器上实现。
本装置实施例中各单元和模块的具体工作方式可以参见本发明方法实施例。
由上所述,本发明实施例提供了一种基于数据的属性信息进行数据搜索的新型方案,通过根据属性信息的特点为相应的数据集合设置搜索代码,并利用搜索代码获取所需的搜索结果等技术手段,实现了一种基于属性的无索引数据搜索方案。
本方案能够有效利用数据自身的属性信息进行数据的搜索,大大扩宽了搜索条件的可选范围,提高了数据搜索的灵活性和系统资源的利用率;并且,本方案可以在内存中实现数据的搜索,解决了直接访问庞大的数据库所造成的搜索速度较低、搜索结果反馈缓慢的问题,提高了搜索速率,实现了搜索结果的高速反馈。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (5)
1.一种数据搜索方法,其特征在于,利用数据的属性信息和内存的需求为具有预定属性的数据集合生成搜索代码,每一搜索代码对应于一个数据集合,将所述搜索代码和数据集合存储在内存中,所述方法包括:
根据接收到的搜索请求匹配得到所需的搜索代码;
利用匹配得到的搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果;
在该数据集合中获取所需的搜索结果包括:
按照数据集合中数据元素在队列中的顺序,从队列头部提取预定数目的数据元素作为所述搜索结果,并将已搜索过的数据元素转移至队列尾部;
所述为具有预定属性的数据集合生成搜索代码包括:
利用所述预定属性和相应的属性内容形成树结构,所述树结构中各节点内容对应于相应属性的属性内容;
将所述树结构中的所有节点按预设规则进行编号;
将树底层的编号作为相应数据集合的搜索代码;
相应的,所述方法还包括:
当所述预定属性发生变化时,通过如下方式更新所述搜索代码:
当加入新的属性时,在树结构中为该新属性增设对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码,所述偏移量指示相关节点更新前的搜索代码与更新后的搜索代码之间偏移的数值;
当将已存在的属性删除时,在树结构中删除该属性的对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码,所述偏移量指示相关节点更新前的搜索代码与更新后的搜索代码之间偏移的数值;
当属性的属性内容发生变化时,在树结构中调整该属性对应层中的节点数目,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码,所述偏移量指示相关节点更新前的搜索代码与更新后的搜索代码之间偏移的数值。
2.根据权利要求1所述的方法,其特征在于,
当第一属性发生变化的概率小于第二属性发生变化的概率时,在树结构中第一属性的对应层位于第二属性对应层的上方。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
搜索代码和数据集合标识之间具有哈希映射关系,且所述数据集合采用哈希集合结构存储该数据集合中的数据元素。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当数据集合中数据元素的数量超过上限阈值时,根据数据元素是否被搜索过或者数据元素被搜索过的次数删除相应数目的数据元素。
5.一种数据搜索装置,其特征在于,所述装置包括:
搜索关系建立单元,用于利用数据的属性信息和内存的需求为具有预定属性的数据集合生成搜索代码,每一搜索代码对应于一个数据集合;其中,所述搜索代码和数据集合存储在内存中;
搜索条件匹配单元,用于根据接收到的搜索请求匹配得到所需的搜索代码;
搜索结果返回单元,用于利用匹配得到的搜索代码查找到相应的数据集合,并在该数据集合中获取所需的搜索结果;
所述搜索结果返回单元,具体是用于按照数据集合中数据元素在队列中顺序,从队列头部提取预定数目的数据元素作为所述搜索结果,并将已搜索过的数据元素转移至队列尾部;
所述搜索关系建立单元,具体用于利用所述预定属性和相应的属性内容形成树结构,所述树结构中各节点内容对应于相应属性的属性内容;将所述树结构中的所有节点按预设规则进行编号;将树底层的编号作为相应数据集合的搜索代码;
当所述预定属性发生变化时,所述搜索关系建立单元通过如下方式更新所述搜索代码:
当加入新的属性时,在树结构中为该新属性增设对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码,所述偏移量指示相关节点更新前的搜索代码与更新后的搜索代码之间偏移的数值;
当将已存在的属性删除时,在树结构中删除该属性的对应层,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码,所述偏移量指示相关节点更新前的搜索代码与更新后的搜索代码之间偏移的数值;
当属性的属性内容发生变化时,在树结构中调整该属性对应层中的节点数目,形成更新后的树结构,对该更新后的树结构中的所有节点按预设规则进行编号,并将树底层的编号作为相应数据集合的搜索代码,或者,获取偏移量,根据偏移量和更新前的搜索代码计算得到相应数据集合的搜索代码,所述偏移量指示相关节点更新前的搜索代码与更新后的搜索代码之间偏移的数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110372084.8A CN103123638B (zh) | 2011-11-21 | 2011-11-21 | 数据搜索方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110372084.8A CN103123638B (zh) | 2011-11-21 | 2011-11-21 | 数据搜索方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103123638A CN103123638A (zh) | 2013-05-29 |
CN103123638B true CN103123638B (zh) | 2017-08-04 |
Family
ID=48454617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110372084.8A Active CN103123638B (zh) | 2011-11-21 | 2011-11-21 | 数据搜索方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103123638B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104123357B (zh) * | 2014-07-17 | 2018-09-14 | 浙江宇视科技有限公司 | 一种查询卡口的方法和装置 |
CN104796754A (zh) * | 2015-04-08 | 2015-07-22 | 天脉聚源(北京)传媒科技有限公司 | 一种收藏页面的显示方法及装置 |
CN105279219A (zh) * | 2015-07-07 | 2016-01-27 | 北京挺软科技有限公司 | 一种多级维度动态切换分级及汇总的实现方法 |
CN109657801B (zh) * | 2019-02-14 | 2021-01-26 | 网易(杭州)网络有限公司 | 推荐系统的分流方法、装置及可读存储介质 |
CN110096627B (zh) * | 2019-03-27 | 2022-03-22 | 深圳星坊科技有限公司 | 珠宝信息的查询方法、装置、计算机设备和存储介质 |
CN113053493B (zh) * | 2019-12-27 | 2024-05-14 | 无锡祥生医疗科技股份有限公司 | 数据处理平台 |
WO2024040607A1 (zh) * | 2022-08-26 | 2024-02-29 | 西门子股份公司 | 数据访问方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226552A (zh) * | 2008-02-01 | 2008-07-23 | 北京乾坤化物数字技术有限公司 | 一种利用多维结构树构成的目录管理海量信息的方法 |
CN101645086B (zh) * | 2009-08-28 | 2013-01-09 | 用友软件股份有限公司 | 检索方法 |
CN102054007B (zh) * | 2009-11-10 | 2012-10-31 | 北大方正集团有限公司 | 一种检索方法及检索装置 |
CN101840427A (zh) * | 2010-04-15 | 2010-09-22 | 北京数码大方科技有限公司 | 数据处理的方法和装置 |
CN102201089A (zh) * | 2011-06-10 | 2011-09-28 | 张宪 | 物资材料编码和管理方法 |
-
2011
- 2011-11-21 CN CN201110372084.8A patent/CN103123638B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN103123638A (zh) | 2013-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103123638B (zh) | 数据搜索方法和装置 | |
CN106156127B (zh) | 选择数据内容向终端推送的方法及装置 | |
CN110147437A (zh) | 一种基于知识图谱的搜索方法及装置 | |
US8190556B2 (en) | Intellegent data search engine | |
CN103368992B (zh) | 一种信息推送方法及装置 | |
CN102955781B (zh) | 一种人物搜索方法及装置 | |
CN104809117B (zh) | 视频数据聚合处理方法、聚合系统及视频搜索平台 | |
CN103902535B (zh) | 获取联想词的方法、装置及系统 | |
CN104412266A (zh) | 用于具有动态排序的树结构的多维数据储存和文件系统的方法和装置 | |
CN101916285B (zh) | 一种互联网网页内容解析方法及装置 | |
CN103491089B (zh) | 一种基于http的数据还原中的转码方法及系统 | |
CN105224554A (zh) | 推荐搜索词进行搜索的方法、系统、服务器和智能终端 | |
CN105159949A (zh) | 一种中文地址分词方法及系统 | |
CN102164186A (zh) | 一种实现云搜索服务的方法及系统 | |
CN104346444B (zh) | 一种基于路网反空间关键字查询的最佳选址方法 | |
US20120310941A1 (en) | System and method for web-based content categorization | |
CN108804516A (zh) | 相似用户查找装置、方法及计算机可读存储介质 | |
CN107122447A (zh) | 一种基于偏好的多数据源融合的网络搜索系统及控制方法 | |
CN113382282B (zh) | 一种页面资源访问方法、装置、电子设备和存储介质 | |
CN108038090A (zh) | 一种文本地址的处理方法和装置 | |
CN103902705B (zh) | 一种基于元数据的跨机构云端数字内容集成系统和方法 | |
CN106919691A (zh) | 基于网页库进行检索的方法、装置及检索系统 | |
CN112256880A (zh) | 文本识别方法和装置、存储介质及电子设备 | |
CN102193996A (zh) | 基于移动设备的可视Web对象搜索引擎方法 | |
US20220358178A1 (en) | Data query method, electronic device, and storage medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: Room 818, 8 / F, 34 Haidian Street, Haidian District, Beijing 100080 Patentee after: BEIJING ULTRAPOWER SOFTWARE Co.,Ltd. Address before: 100089 Beijing city Haidian District wanquanzhuang Road No. 28 Wanliu new building 6 storey block A Room 601 Patentee before: BEIJING ULTRAPOWER SOFTWARE Co.,Ltd. |