模糊查询方法及系统技术方案

技术编号:8532885 阅读:852 留言:0更新日期:2013-04-04 15:54
一种模糊查询方法,包括以下步骤:根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引;将所述全局索引排序;获取查询关键字,采用区间二分法查找与所述查询关键字匹配的索引区间;获取所述索引区间内的索引值,根据所述映射关系获取与所述索引值对应的数据项,并将所述数据项作为查询结果返回。采用了上述模糊查询方法和系统,可以很好的利用二分查找方法时间复杂度低的优势,在牺牲少量空间复杂度的情况下,换取较高的检索速度,从而提高了检索效率。

【技术实现步骤摘要】
模糊查询方法及系统
本专利技术涉及计算机
,特别涉及一种模糊查询方法及系统。
技术介绍
数据库是计算机
常见的一种数据持久化解决方案。传统技术的数据库业务运营中,某些作为信息提供者的数据库表,查询操作频繁,而增加、更新和删除的操作较少发生。为了提高查询效率,通常会对数据库表建立索引。索引通过适量增加空间复杂度来降低查询的时间复杂度,从而提高查询效率。模糊查询是传统技术中一种常见的数据查询需求,通常使用数据库查询语言SQL 中的like语句。但是在根据查询关键字使用SQL中的以%开头的like语句查询数据表时,无法利用前述的索引技术,而必须遍历整个数据表。这种遍历整个数据表的方式效率非常低,查询速度非常慢,无法满足某些对实时性有要求的查询任务。
技术实现思路
基于此,有必要提供一种能提高查询效率的模糊查询方法。一种模糊查询方法,包括以下步骤根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引;将所述全局索引排序;获取查询关键字,采用区间二分法查找与所述查询关键字匹配的索引区间;获取所述索引区间内的索引值,根据所述映射关系获取与所述索引值对应的数据项,并将所述数据项作为查询结果返回。优选的,所述索引值和数据项之间的映射关系为多个索引值对应一个数据项的映身寸关系。优选的,所述采用区间二分法查找与所述查询关键字匹配的索引区间的步骤具体为采用二分法定位与所述查询关键字匹配的匹配索引;以所述匹配索引为端点获取所述索引区间的边界。优选的,所述根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引之后还包括在所述全局索引中存储索引值的查询次数;缓存所述查询次数大于阈值的索引值及与所述查询次数大于阈值的索引值所对应的数据项。优选的,所述获取查询关键字之后,还包括在缓存中查找与所述查询关键字匹配的索引值,并将缓存中的与所述查找到的索引值对应的数据项作为查询结果返回,以及将与所述查询关键字匹配的索引值的查询次数加I。此外,还有必要提供一种能提高查询效率的模糊查询系统。一种模糊查询系统,包括以下模块索引模块,用于根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引;排序模块,用于将所述全局索引排序;查找模块,用于获取查询关键字,采用区间二分法查找与所述查询关键字匹配的索引区间;取值模块,用于获取所述索引区间内的索引值,根据所述映射关系获取与所述索引值对应的数据项,并将所述数据项作为查询结果返回。优选的,所述索引值和数据项之间的映射关系为多个索引值对应一个数据项的映 身寸关系。优选的,所述查找模块包括用于采用二分法定位与所述查询关键字匹配的匹配索引的第一子模块和用于以所述匹配索引为端点获取所述索引区间的边界的第二子模块。优选的,还包括用于在所述全局索引中存储索引值的查询次数,并缓存所述查询次数大于阈值的索引值及与所述查询次数大于阈值的索引值所对应的数据项的缓存模块。优选的,所述查找模块还用于在缓存中查找与所述查询关键字匹配的索引值,并将缓存中的与所述查找到的索引值对应的数据项作为查询结果返回,以及将与所述查询关键字匹配的索引值的查询次数加I。上述模糊查询方法和系统先对数据表建立了统一的全局索引,然后使用时间复杂度较低的二分法进行查找定位与关键词匹配的索引构成的索引区间,高效地利用了索引本身的连续性和有序性,从而在牺牲了部分空间复杂度(用于存储索引)的情况下降低了查询的时间复杂度,提高了查询速度,从而提高了模糊查询的效率。附图说明图1为一个实施例中模糊查询方法的流程图;图2为一个实施例中索引值与数据项的映射关系示例图;图3为一个实施例中模糊查询系统的结构示意图。具体实施方式如图1所示,在一个实施例中,一种模糊查询方法,包括以下步骤步骤S102,根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引。数据库由多个数据库表构成,数据库表内存储有多条数据记录,一条数据记录即为一个数据项。例如,数据库中存储有用户信息表和组织结构表两个表。用户信息表中存储的数据为用户的相关信息;组织结构表中存储的数据为公司的组成结构中各个部门的相关信息。在一个实施例中,先确定数据库中查询操作频繁而增加、删除和更新操作较少的数据库表,然后为这些查找操作频繁的数据库表中的数据项定义关键字。优选的,可以为数据项定义多个关键字。然后将关键字作为索引值在数据库中建立全局索引。索引值和数据项具有映射关系,优选的,为多对一的映射关系,即多个索引值对应一个数据项。而对于多个数据项的具有相同的关键字的情况,可使用多个相同的索引值来分别映射多个不同的数据项。例如,对于索引值“lm”,既可以是“黎明”的缩写,也可以是“李萌”的缩写。此时,只需建立两条索引值“lm”分别对应“黎明”和“李萌”即可。步骤S104,将全局索引排序。在一个实施例中,当全局索引建立好以后,再根据预设的排序规则,对全局索引进行排序。优选的,预设的排序规则为字典序,即先将索引值转换成字符串(中文字符先转换成拼音),然后根据字符串的字典序进行排序。例如索引值序列[ab,a,abe,b,abc]按照字典序从小到大排序后即为[a, ab, abc, abe, b]。步骤S106,获取查询关键字,采用区间二分法查找与查询关键字匹配的索引区间。步骤S108,获取索引区间内的索引值,根据映射关系获取与索引值对应的数据项,并将数据项作为查询结果返回。区间二分法(RBS, Range Binary Search)为一种基于传统的二分法的数据查找方法。与传统的二分法相比,传统的二分法查找是在一个序列中确定查询关键字所在的位置,而区间二分法是定位与查询关键字匹配的所有匹配值组成的连续区间。在一个实施例中,获取查询关键字,采用区间二分法查找与查询关键字匹配的索引区间(1)采用二分法定位与查询关键字匹配的匹配索引;(2)以该匹配索引为端点获取该索引区间的边界(例如,用数组存储索引值序列时索引区间的边界为数组的下标构成的连续整数序列中某个连续区间的左右端点对应的索引值,例如对于数组下标构成的连续区间[a,b],则a为该区间的左端点,b为该区间的右端点)。具体的,以匹配索引为端点获取索引区间的边界的步骤优选为以该匹配索引为端点采用二分法分别获取与查询关键字匹配的索引区间的左右端点。下面以一个具体的实例来说明上述步骤S106的具体过程。该实例中,设全局索引中的索引值序列存储于数组E中,并按字典序从小到大排列。期望查找的关键字为key。模糊查找时,key与索引值的匹配关系为若索引值字符串以key作为起始字符(包括索引值字符串与key完全相同的情况),则该索引值与关键字key匹配,否则,不匹配。两个字符串按字典序比较大小的方法为先比较两个字符串的首字符的ASCII码值(对于中文字符转化为拼音),首字符ASCII码值大的字符串较大;若首字符的ASCII码值相等,则继续比较下一位字符,直至最后一位。若比较至某一位时,某个字符串已结尾,则默认此字符串此位的ASCII码为0(即必然最小)。例如,按照字典序,a < b,a < ab,abcde<abcfo步骤S106中查找与查询关键字匹配的索引区间的具体过程为(I)初始化整型游标变量 low、mid 和 high,令 low = 0,h本文档来自技高网...

【技术保护点】
一种模糊查询方法,包括以下步骤:根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引;将所述全局索引排序;获取查询关键字,采用区间二分法查找与所述查询关键字匹配的索引区间;获取所述索引区间内的索引值,根据所述映射关系获取与所述索引值对应的数据项,并将所述数据项作为查询结果返回。

【技术特征摘要】
1.一种模糊查询方法,包括以下步骤 根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引; 将所述全局索引排序; 获取查询关键字,采用区间二分法查找与所述查询关键字匹配的索引区间; 获取所述索引区间内的索引值,根据所述映射关系获取与所述索引值对应的数据项,并将所述数据项作为查询结果返回。2.根据权利要求1所述的模糊查询方法,其特征在于,所述索引值和数据项之间的映射关系为多个索引值对应一个数据项的映射关系。3.根据权利要求1或2所述的模糊查询方法,其特征在于,所述采用区间二分法查找与所述查询关键字匹配的索引区间的步骤具体为 采用二分法定位与所述查询关键字匹配的匹配索引; 以所述匹配索引为端点获取所述索引区间的边界。4.根据权利要求1所述的模糊查询方法,其特征在于,所述根据预设的索引值和数据项之间的映射关系对数据库表建立全局索引之后还包括 在所述全局索引中存储索引值的查询次数; 缓存所述查询次数大于阈值的索引值及与所述查询次数大于阈值的索引值所对应的数据项。5.根据权利要求4所述的模糊查询方法,其特征在于,所述获取查询关键字之后,还包括 在缓存中查找与所述查询关键字匹配的索引值,并将缓存中的与所述查找到的索引值对应的数据项作为查询结果返回,以及将与所述查询关键字匹配的索引...

【专利技术属性】
技术研发人员:陈伟君
申请(专利权)人:深圳市金蝶中间件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1