两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

模糊查詢方法及系統(tǒng)的制作方法

文檔序號(hào):6433596閱讀:508來(lái)源:國(guó)知局
專利名稱:模糊查詢方法及系統(tǒng)的制作方法
模糊查詢方法及系統(tǒng)
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種模糊查詢方法及系統(tǒng)。
背景技術(shù)
數(shù)據(jù)庫(kù)是計(jì)算機(jī)技術(shù)領(lǐng)域常見(jiàn)的一種數(shù)據(jù)持久化解決方案。傳統(tǒng)技術(shù)的數(shù)據(jù)庫(kù)業(yè)務(wù)運(yùn)營(yíng)中,某些作為信息提供者的數(shù)據(jù)庫(kù)表,查詢操作頻繁,而增加、更新和刪除的操作較少發(fā)生。為了提高查詢效率,通常會(huì)對(duì)數(shù)據(jù)庫(kù)表建立索引。索引通過(guò)適量增加空間復(fù)雜度來(lái)降低查詢的時(shí)間復(fù)雜度,從而提高查詢效率。模糊查詢是傳統(tǒng)技術(shù)中一種常見(jiàn)的數(shù)據(jù)查詢需求,通常使用數(shù)據(jù)庫(kù)查詢語(yǔ)言SQL 中的like語(yǔ)句。但是在根據(jù)查詢關(guān)鍵字使用SQL中的以%開(kāi)頭的like語(yǔ)句查詢數(shù)據(jù)表時(shí),無(wú)法利用前述的索引技術(shù),而必須遍歷整個(gè)數(shù)據(jù)表。這種遍歷整個(gè)數(shù)據(jù)表的方式效率非常低,查詢速度非常慢,無(wú)法滿足某些對(duì)實(shí)時(shí)性有要求的查詢?nèi)蝿?wù)。

發(fā)明內(nèi)容基于此,有必要提供一種能提高查詢效率的模糊查詢方法。一種模糊查詢方法,包括以下步驟根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引;將所述全局索引排序;獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與所述查詢關(guān)鍵字匹配的索引區(qū)間;獲取所述索引區(qū)間內(nèi)的索引值,根據(jù)所述映射關(guān)系獲取與所述索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并將所述數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回。優(yōu)選的,所述索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系為多個(gè)索引值對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)的映身寸關(guān)系。優(yōu)選的,所述采用區(qū)間二分法查找與所述查詢關(guān)鍵字匹配的索引區(qū)間的步驟具體為采用二分法定位與所述查詢關(guān)鍵字匹配的匹配索引;以所述匹配索引為端點(diǎn)獲取所述索引區(qū)間的邊界。優(yōu)選的,所述根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引之后還包括在所述全局索引中存儲(chǔ)索引值的查詢次數(shù);緩存所述查詢次數(shù)大于閾值的索引值及與所述查詢次數(shù)大于閾值的索引值所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。優(yōu)選的,所述獲取查詢關(guān)鍵字之后,還包括在緩存中查找與所述查詢關(guān)鍵字匹配的索引值,并將緩存中的與所述查找到的索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回,以及將與所述查詢關(guān)鍵字匹配的索引值的查詢次數(shù)加I。
此外,還有必要提供一種能提高查詢效率的模糊查詢系統(tǒng)。一種模糊查詢系統(tǒng),包括以下模塊索引模塊,用于根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引;排序模塊,用于將所述全局索引排序;查找模塊,用于獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與所述查詢關(guān)鍵字匹配的索引區(qū)間;取值模塊,用于獲取所述索引區(qū)間內(nèi)的索引值,根據(jù)所述映射關(guān)系獲取與所述索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并將所述數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回。優(yōu)選的,所述索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系為多個(gè)索引值對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)的映 身寸關(guān)系。優(yōu)選的,所述查找模塊包括用于采用二分法定位與所述查詢關(guān)鍵字匹配的匹配索引的第一子模塊和用于以所述匹配索引為端點(diǎn)獲取所述索引區(qū)間的邊界的第二子模塊。優(yōu)選的,還包括用于在所述全局索引中存儲(chǔ)索引值的查詢次數(shù),并緩存所述查詢次數(shù)大于閾值的索引值及與所述查詢次數(shù)大于閾值的索引值所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)的緩存模塊。優(yōu)選的,所述查找模塊還用于在緩存中查找與所述查詢關(guān)鍵字匹配的索引值,并將緩存中的與所述查找到的索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回,以及將與所述查詢關(guān)鍵字匹配的索引值的查詢次數(shù)加I。上述模糊查詢方法和系統(tǒng)先對(duì)數(shù)據(jù)表建立了統(tǒng)一的全局索引,然后使用時(shí)間復(fù)雜度較低的二分法進(jìn)行查找定位與關(guān)鍵詞匹配的索引構(gòu)成的索引區(qū)間,高效地利用了索引本身的連續(xù)性和有序性,從而在犧牲了部分空間復(fù)雜度(用于存儲(chǔ)索引)的情況下降低了查詢的時(shí)間復(fù)雜度,提高了查詢速度,從而提高了模糊查詢的效率。

圖1為一個(gè)實(shí)施例中模糊查詢方法的流程圖;圖2為一個(gè)實(shí)施例中索引值與數(shù)據(jù)項(xiàng)的映射關(guān)系示例圖;圖3為一個(gè)實(shí)施例中模糊查詢系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式如圖1所示,在一個(gè)實(shí)施例中,一種模糊查詢方法,包括以下步驟步驟S102,根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引。數(shù)據(jù)庫(kù)由多個(gè)數(shù)據(jù)庫(kù)表構(gòu)成,數(shù)據(jù)庫(kù)表內(nèi)存儲(chǔ)有多條數(shù)據(jù)記錄,一條數(shù)據(jù)記錄即為一個(gè)數(shù)據(jù)項(xiàng)。例如,數(shù)據(jù)庫(kù)中存儲(chǔ)有用戶信息表和組織結(jié)構(gòu)表兩個(gè)表。用戶信息表中存儲(chǔ)的數(shù)據(jù)為用戶的相關(guān)信息;組織結(jié)構(gòu)表中存儲(chǔ)的數(shù)據(jù)為公司的組成結(jié)構(gòu)中各個(gè)部門的相關(guān)信息。在一個(gè)實(shí)施例中,先確定數(shù)據(jù)庫(kù)中查詢操作頻繁而增加、刪除和更新操作較少的數(shù)據(jù)庫(kù)表,然后為這些查找操作頻繁的數(shù)據(jù)庫(kù)表中的數(shù)據(jù)項(xiàng)定義關(guān)鍵字。優(yōu)選的,可以為數(shù)據(jù)項(xiàng)定義多個(gè)關(guān)鍵字。然后將關(guān)鍵字作為索引值在數(shù)據(jù)庫(kù)中建立全局索引。索引值和數(shù)據(jù)項(xiàng)具有映射關(guān)系,優(yōu)選的,為多對(duì)一的映射關(guān)系,即多個(gè)索引值對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)。而對(duì)于多個(gè)數(shù)據(jù)項(xiàng)的具有相同的關(guān)鍵字的情況,可使用多個(gè)相同的索引值來(lái)分別映射多個(gè)不同的數(shù)據(jù)項(xiàng)。例如,對(duì)于索引值“l(fā)m”,既可以是“黎明”的縮寫,也可以是“李萌”的縮寫。此時(shí),只需建立兩條索引值“l(fā)m”分別對(duì)應(yīng)“黎明”和“李萌”即可。步驟S104,將全局索引排序。在一個(gè)實(shí)施例中,當(dāng)全局索引建立好以后,再根據(jù)預(yù)設(shè)的排序規(guī)則,對(duì)全局索引進(jìn)行排序。優(yōu)選的,預(yù)設(shè)的排序規(guī)則為字典序,即先將索引值轉(zhuǎn)換成字符串(中文字符先轉(zhuǎn)換成拼音),然后根據(jù)字符串的字典序進(jìn)行排序。例如索引值序列[ab,a,abe,b,abc]按照字典序從小到大排序后即為[a, ab, abc, abe, b]。步驟S106,獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與查詢關(guān)鍵字匹配的索引區(qū)間。步驟S108,獲取索引區(qū)間內(nèi)的索引值,根據(jù)映射關(guān)系獲取與索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并將數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回。區(qū)間二分法(RBS, Range Binary Search)為一種基于傳統(tǒng)的二分法的數(shù)據(jù)查找方法。與傳統(tǒng)的二分法相比,傳統(tǒng)的二分法查找是在一個(gè)序列中確定查詢關(guān)鍵字所在的位置,而區(qū)間二分法是定位與查詢關(guān)鍵字匹配的所有匹配值組成的連續(xù)區(qū)間。在一個(gè)實(shí)施例中,獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與查詢關(guān)鍵字匹配的索引區(qū)間(1)采用二分法定位與查詢關(guān)鍵字匹配的匹配索引;(2)以該匹配索引為端點(diǎn)獲取該索引區(qū)間的邊界(例如,用數(shù)組存儲(chǔ)索引值序列時(shí)索引區(qū)間的邊界為數(shù)組的下標(biāo)構(gòu)成的連續(xù)整數(shù)序列中某個(gè)連續(xù)區(qū)間的左右端點(diǎn)對(duì)應(yīng)的索引值,例如對(duì)于數(shù)組下標(biāo)構(gòu)成的連續(xù)區(qū)間[a,b],則a為該區(qū)間的左端點(diǎn),b為該區(qū)間的右端點(diǎn))。具體的,以匹配索引為端點(diǎn)獲取索引區(qū)間的邊界的步驟優(yōu)選為以該匹配索引為端點(diǎn)采用二分法分別獲取與查詢關(guān)鍵字匹配的索引區(qū)間的左右端點(diǎn)。下面以一個(gè)具體的實(shí)例來(lái)說(shuō)明上述步驟S106的具體過(guò)程。該實(shí)例中,設(shè)全局索引中的索引值序列存儲(chǔ)于數(shù)組E中,并按字典序從小到大排列。期望查找的關(guān)鍵字為key。模糊查找時(shí),key與索引值的匹配關(guān)系為若索引值字符串以key作為起始字符(包括索引值字符串與key完全相同的情況),則該索引值與關(guān)鍵字key匹配,否則,不匹配。兩個(gè)字符串按字典序比較大小的方法為先比較兩個(gè)字符串的首字符的ASCII碼值(對(duì)于中文字符轉(zhuǎn)化為拼音),首字符ASCII碼值大的字符串較大;若首字符的ASCII碼值相等,則繼續(xù)比較下一位字符,直至最后一位。若比較至某一位時(shí),某個(gè)字符串已結(jié)尾,則默認(rèn)此字符串此位的ASCII碼為0(即必然最小)。例如,按照字典序,a < b,a < ab,abcde
<abcfo步驟S106中查找與查詢關(guān)鍵字匹配的索引區(qū)間的具體過(guò)程為(I)初始化整型游標(biāo)變量 low、mid 和 high,令 low = 0,high = E. length-1,其中,E. length表示數(shù)組E的長(zhǎng)度。再令索引區(qū)間的左端點(diǎn)的下標(biāo)為L(zhǎng)0W,右端點(diǎn)的下標(biāo)為HIGH,且假定初始的左右端點(diǎn)的下標(biāo)為L(zhǎng)OW = HIGH = -1。(2)當(dāng)low <= high時(shí),循環(huán)執(zhí)行(3),否則,執(zhí)行(4)。(3)賦值mid = (low+high)/2,比較key與索引值E[mid]的大小,E[mid]為數(shù)組E中下標(biāo)為mid的元素
如果按前述的字典序比較后,key < E [mid],則E [mid]落在索引區(qū)間的右端點(diǎn)的右側(cè),即E[mid]比索引區(qū)間的右端點(diǎn)大,從而可以淘汰所有下標(biāo)大于mid-1的索引值,然后賦值high = mid-1并返回⑵繼續(xù)比較;如果按前述的字典序比較后,key > E [mid]且key與E [mid]不匹配,貝U E [mid]落在索引區(qū)間的左端點(diǎn)的左側(cè),即E[mid]比索引區(qū)間的左端點(diǎn)小,從而可以淘汰所有下標(biāo)小于mid+1的索引值,然后賦值low = mid+1并返回(2)繼續(xù)比較;如果按前述的字典序比較后,若key <= E[mid]且key與E[mid]匹配,貝U E[mid]落在索引區(qū)間內(nèi),即E[mid]為匹配索引。然后,執(zhí)行子過(guò)程S3和S4,并將S3的返回值賦值給L0W,將S4的返回值賦值給HIGH。子過(guò)程S3和S4分別用于定位索引區(qū)間的左端點(diǎn)和右端點(diǎn)。(4)判斷LOW的值,若LOW的值是-1,則返回空值,即沒(méi)有找到匹配索引;如果LOW
<=HIGH,則返回索引區(qū)間的左端點(diǎn)的下標(biāo)LOW和右端點(diǎn)的下標(biāo)HIGH。子過(guò)程S3用于獲取索引區(qū)間的左端點(diǎn),具體過(guò)程為(a)初始化整型游標(biāo)變量 s3_low = low, s3_high = mid, s3_mid = 0(此處的 low和high均為前述步驟S106中的局部游標(biāo)變量)。(b)當(dāng) s3_low < s3_high 時(shí),執(zhí)行(C),否則,執(zhí)行(d)。(c)賦值 s3_mid = (s3_low+s3_high)/2,比較 key 與 E [s3_mid]如果key與E[s3_mid]不匹配,貝U下標(biāo)小于s3_mid+l以前的元素,即s3_low =s3_mid+lo如果key與E[s3_mid]匹配,貝U淘汰下標(biāo)大于s3_mid_l的元素,即s3_high = s3_mid-1,執(zhí)行(b)(最終(c)結(jié)束后將因?yàn)閟3_low = s3_high而進(jìn)入(d))。(d)比較 key 與 E[s3_low],如果 key 匹配 E[s3_low]則返回 s3_low,否則返回 s3_
IOW+I。子過(guò)程S4用于獲取索引區(qū)間的右端點(diǎn),具體過(guò)程為(I)初始化整型變量時(shí) s4_low = mid, s4_high = high, s4_mid = 0(此處的 low和high均為前述步驟S106中的局部游標(biāo)變量)。(II)當(dāng) s4_low < s4_high 時(shí),執(zhí)行(III),否貝丨J,執(zhí)行(IV)。(III)賦值 s4_mid = (s4_low+s4_high)/2,比較 key 與 E[s4_mid]的大小,如果key與E[s4_mid]不匹配,貝U淘汰數(shù)組E中所有下標(biāo)在s4_mid_l以后的元素,即s4_high =s4_mid_lo如果key 與 E[s4_mid]匹配,貝U淘汰 s4_mid+l 前面的記錄,即 s4_low = s4_mid+l,執(zhí)行(II)(最終,(III)結(jié)束后將因?yàn)閟4_low = s4_high而執(zhí)行(IV))。(IV)比較 key 與 E[s4_low]的大小,如果 key 與 E [s4_low]匹配,貝U返回 s4_low,否則返回s4_low_l。需要說(shuō)明的是,在其他實(shí)施例中,對(duì)于上述定位與查詢關(guān)鍵字匹配的索引區(qū)間的方法還可以優(yōu)選為根據(jù)查詢關(guān)鍵字的長(zhǎng)短進(jìn)行調(diào)整。即,若某個(gè)查詢關(guān)鍵字較長(zhǎng)(相對(duì)于索引值),則可以預(yù)估得出匹配區(qū)間較小(查詢關(guān)鍵字較長(zhǎng),則大于全局索引中大多數(shù)索引值,因此與之匹配的索引值也相對(duì)較少),則在確定了匹配索引后,直接采用順序查找法(按順序依次逐個(gè)比較)定位匹配索引的左右端點(diǎn)。
例如,若某次查詢時(shí),與查詢關(guān)鍵字匹配的匹配區(qū)間只包括兩個(gè)索引值,則根據(jù)順序查找法經(jīng)過(guò)三次比較即可確定出匹配區(qū)間的左右端點(diǎn)。若此時(shí)仍然采用二分法來(lái)確定匹配區(qū)間的左右端點(diǎn),在索引值序列的長(zhǎng)度較長(zhǎng)時(shí),則需要二分多次才能得到結(jié)果。上述在查詢關(guān)鍵字較長(zhǎng)時(shí)采用順序查找法定位匹配索引的左右端點(diǎn)的方法可以加快查詢速度。通過(guò)步驟S106定位了與關(guān)鍵字匹配的索引區(qū)間的邊界后,則根據(jù)前述的映射關(guān)系,將與索引區(qū)間內(nèi)的所有索引值對(duì)應(yīng)的所有數(shù)據(jù)項(xiàng)找出,生成一個(gè)查詢結(jié)果列表,然后將查詢結(jié)果列表作為查詢結(jié)果返回。當(dāng)模糊查詢結(jié)果很多,而顯示查詢結(jié)果的界面較小時(shí),通常不能一次性將所有查詢結(jié)果展示給用戶。且某些情況下,用戶往往只關(guān)心最常見(jiàn)的或者跟模糊查找最接近的一個(gè)結(jié)果。因此,在根據(jù)預(yù)設(shè)的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引之后還可包括在全局索引中存儲(chǔ)索引值的查詢次數(shù);緩存查詢次數(shù)大于閾值的索引值及與查詢次數(shù)大于閾值的索引值所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。在一個(gè)實(shí)施例中,獲取查詢關(guān)鍵字之后還可包括在緩存中查找與該查詢關(guān)鍵字匹配的索引值,并將緩存中的與查找到的索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回,以及將與查詢關(guān)鍵字匹配的索引值的查詢次數(shù)加I。例如,關(guān)鍵字“ scb”匹配“市場(chǎng)部”的次數(shù)最多,而匹配人名“沈昌斌”的次數(shù)較少。因此,當(dāng)接收到關(guān)鍵字為“scb”的查詢請(qǐng)求時(shí),先在緩存中找到“scb”對(duì)應(yīng)的查詢次數(shù)最多的數(shù)據(jù)項(xiàng)“市場(chǎng)部”,然后先將“市場(chǎng)部”數(shù)據(jù)項(xiàng)返回。同時(shí),可繼續(xù)在全局索引中執(zhí)行前述的步驟S106,最后將所有模糊查詢結(jié)果返回。這種處理方式使得用戶等待查詢結(jié)果的時(shí)間更短,有效地利用了用戶瀏覽查詢結(jié)果的時(shí)間,提高了用戶體驗(yàn)。如圖2所示,在一個(gè)實(shí)施例中,一種模糊查詢系統(tǒng),包括索引模塊102、排序模塊104、查找模塊106以及取值模塊108,其中索引模塊102用于根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引。數(shù)據(jù)庫(kù)由多個(gè)數(shù)據(jù)庫(kù)表構(gòu)成,數(shù)據(jù)庫(kù)表內(nèi)存儲(chǔ)有多條數(shù)據(jù)記錄,一條數(shù)據(jù)記錄即為一個(gè)數(shù)據(jù)項(xiàng)。例如,數(shù)據(jù)庫(kù)中存儲(chǔ)有用戶信息表和組織結(jié)構(gòu)表兩個(gè)表。用戶信息表中存儲(chǔ)的數(shù)據(jù)為用戶的相關(guān)信息;組織結(jié)構(gòu)表中存儲(chǔ)的數(shù)據(jù)為公司的組成結(jié)構(gòu)中各個(gè)部門的相關(guān)信息。在一個(gè)實(shí)施例中,索引模塊102先確定數(shù)據(jù)庫(kù)中查詢操作頻繁而增加、刪除和更新操作較少的數(shù)據(jù)庫(kù)表,然后為這些查找操作頻繁的數(shù)據(jù)庫(kù)表中的數(shù)據(jù)項(xiàng)定義關(guān)鍵字。優(yōu)選的,索引模塊102可以為數(shù)據(jù)項(xiàng)定義多個(gè)關(guān)鍵字。然后將關(guān)鍵字作為索引值在數(shù)據(jù)庫(kù)中建立全局索引。索引值和數(shù)據(jù)項(xiàng)具有映射關(guān)系,優(yōu)選的,為多對(duì)一的映射關(guān)系,即多個(gè)索引值對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)。而對(duì)于多個(gè)數(shù)據(jù)項(xiàng)的具有相同的關(guān)鍵字的情況,可使用多個(gè)相同的索弓I值來(lái)分別映射多個(gè)不同的數(shù)據(jù)項(xiàng)。例如,對(duì)于索引值“l(fā)m”,既可以是“黎明”的縮寫,也可以是“李萌”的縮寫。此時(shí),只需建立兩條索引值“l(fā)m”分別對(duì)應(yīng)“黎明”和“李萌”即可。排序模塊104用于將全局索引排序。在一個(gè)實(shí)施例中,當(dāng)全局索引建立好以后,再根據(jù)預(yù)設(shè)的排序規(guī)則,對(duì)全局索引進(jìn)行排序。優(yōu)選的,預(yù)設(shè)的排序規(guī)則為字典序,即先將索引值轉(zhuǎn)換成字符串(中文字符先轉(zhuǎn)換成拼音),然后根據(jù)字符串的字典序進(jìn)行排序。例如索引序列[ab,a,abe,b,abc]按照字典序從小到大排序后即為[a, ab, abc, abe, b]。查詢模塊106用于獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與查詢關(guān)鍵字匹配的索引區(qū)間。取值模塊108用于獲取索引區(qū)間內(nèi)的索引值,根據(jù)映射關(guān)系獲取與索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并將數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回。區(qū)間二分法(RBS, Range Binary Search)為一種基于傳統(tǒng)的二分法的數(shù)據(jù)查找方法。與傳統(tǒng)的二分法相比,傳統(tǒng)的二分法查找是在一個(gè)序列中確定查詢關(guān)鍵字所在的位置,而區(qū)間二分法是定位與查詢關(guān)鍵字匹配的所有匹配值組成的連續(xù)區(qū)間。在一個(gè)實(shí)施例中,查找模塊包括用于采用區(qū)間二分法定位與查詢關(guān)鍵字匹配的匹配索引的第一子模塊(圖中未示出)和用于以匹配索引為端點(diǎn)獲取索引區(qū)間的邊界(例如,用數(shù)組存儲(chǔ)索引值序列時(shí)索引區(qū)間的邊界為數(shù)組的下標(biāo)構(gòu)成的連續(xù)整數(shù)序列中某個(gè)連續(xù)區(qū)間的左右端點(diǎn)對(duì)應(yīng)的索引值,例如對(duì)于數(shù)組下標(biāo)構(gòu)成的連續(xù)區(qū)間[a,b],則a為該區(qū)間的左端點(diǎn),b為該區(qū)間的右端點(diǎn))的第二子模塊(圖中未示出)。具體的,第二子模塊以該匹配索引為端點(diǎn)采用二分法分別獲取與查詢關(guān)鍵字匹配的索引區(qū)間的左右端點(diǎn)。查詢模塊106采用區(qū)間二分法查找與查詢關(guān)鍵字匹配的索引區(qū)間的具體過(guò)程請(qǐng)參考前述的步驟S106描述的查詢過(guò)程,在此不再贅述。需要說(shuō)明的是,在其他實(shí)施例中,第二子模塊在定位與查詢關(guān)鍵字匹配的索引區(qū)間時(shí),還可以優(yōu)選為根據(jù)查詢關(guān)鍵字的長(zhǎng)短進(jìn)行調(diào)整。即,若某個(gè)查詢關(guān)鍵字較長(zhǎng)(相對(duì)于索引值),則可以預(yù)估得出匹配區(qū)間較小(查詢關(guān)鍵字較長(zhǎng),則大于全局索引中大多數(shù)索引值,因此與之匹配的索引值也相對(duì)較少),則在確定了匹配索引后,直接采用順序查找法(按順序依次逐個(gè)比較)定位匹配索引的左右端點(diǎn)。例如,若某次查詢時(shí),與查詢關(guān)鍵字匹配的匹配區(qū)間只包括兩個(gè)索引值,則根據(jù)順序查找法經(jīng)過(guò)三次比較即可確定出匹配區(qū)間的左右端點(diǎn)。若此時(shí)仍然采用二分法來(lái)確定匹配區(qū)間的左右端點(diǎn),在索引值序列的長(zhǎng)度較長(zhǎng)時(shí),則需要二分多次才能得到結(jié)果。上述在查詢關(guān)鍵字較長(zhǎng)時(shí)采用順序查找法定位匹配索引的左右端點(diǎn)的方法可以加快查詢速度。查詢模塊106定位了與關(guān)鍵字匹配的索引區(qū)間的邊界后,取值模塊108則根據(jù)前述的映射關(guān)系,將與索引區(qū)間內(nèi)的所有索引值對(duì)應(yīng)的所有數(shù)據(jù)項(xiàng)找出,生成一個(gè)查詢結(jié)果列表,然后將查詢結(jié)果列表作為查詢結(jié)果返回。當(dāng)模糊查詢結(jié)果很多,而顯示查詢結(jié)果的界面較小時(shí),通常不能一次性將所有查詢結(jié)果展示給用戶。且某些情況下,用戶往往只關(guān)心最常見(jiàn)的或者跟模糊查找最接近的一個(gè)結(jié)果,因此,優(yōu)選的,在一實(shí)施例中,還包括用于在前述的全局索引中存儲(chǔ)索引值的查詢次數(shù),并緩存查詢次數(shù)大于閾值的索引值及與查詢次數(shù)大于閾值的索引值所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)的緩存模塊(圖中未標(biāo)示)。在一個(gè)實(shí)施例中,查找模塊還用于在緩存中查找與查詢關(guān)鍵字匹配的索引值,并將緩存中的與查找到的索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回,以及將與查詢關(guān)鍵字匹配的索引值的查詢次數(shù)加I。例如,關(guān)鍵字“scb”匹配“市場(chǎng)部”的次數(shù)最多,而匹配人名“沈昌斌”的次數(shù)較少。因此,當(dāng)接收到關(guān)鍵字為“scb”的查詢請(qǐng)求時(shí),先在緩存中找到“scb”對(duì)應(yīng)的查詢次數(shù)最多的數(shù)據(jù)項(xiàng)“市場(chǎng)部”,然后先將“市場(chǎng)部”數(shù)據(jù)項(xiàng)返回。同時(shí),查詢模塊106可繼續(xù)在全局索引中查詢所有與查詢關(guān)鍵字匹配的關(guān)鍵字,最后取值模塊108將所有模糊查詢結(jié)果返回。這種處理方式使得用戶等待查詢結(jié)果的時(shí)間更短,有效地利用了用戶瀏覽查詢結(jié)果的時(shí)間,提聞了用戶體驗(yàn)。以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種模糊查詢方法,包括以下步驟 根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引; 將所述全局索引排序; 獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與所述查詢關(guān)鍵字匹配的索引區(qū)間; 獲取所述索引區(qū)間內(nèi)的索引值,根據(jù)所述映射關(guān)系獲取與所述索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并將所述數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回。
2.根據(jù)權(quán)利要求1所述的模糊查詢方法,其特征在于,所述索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系為多個(gè)索引值對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)的映射關(guān)系。
3.根據(jù)權(quán)利要求1或2所述的模糊查詢方法,其特征在于,所述采用區(qū)間二分法查找與所述查詢關(guān)鍵字匹配的索引區(qū)間的步驟具體為 采用二分法定位與所述查詢關(guān)鍵字匹配的匹配索引; 以所述匹配索引為端點(diǎn)獲取所述索引區(qū)間的邊界。
4.根據(jù)權(quán)利要求1所述的模糊查詢方法,其特征在于,所述根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引之后還包括 在所述全局索引中存儲(chǔ)索引值的查詢次數(shù); 緩存所述查詢次數(shù)大于閾值的索引值及與所述查詢次數(shù)大于閾值的索引值所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)。
5.根據(jù)權(quán)利要求4所述的模糊查詢方法,其特征在于,所述獲取查詢關(guān)鍵字之后,還包括 在緩存中查找與所述查詢關(guān)鍵字匹配的索引值,并將緩存中的與所述查找到的索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回,以及將與所述查詢關(guān)鍵字匹配的索引值的查詢次數(shù)加I。
6.一種模糊查詢系統(tǒng),其特征在于,包括以下模塊 索引模塊,用于根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引; 排序模塊,用于將所述全局索引排序; 查找模塊,用于獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與所述查詢關(guān)鍵字匹配的索引區(qū)間; 取值模塊,用于獲取所述索引區(qū)間內(nèi)的索引值,根據(jù)所述映射關(guān)系獲取與所述索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并將所述數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回。
7.根據(jù)權(quán)利要求6所述的模糊查詢系統(tǒng),其特征在于,所述索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系為多個(gè)索引值對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)的映射關(guān)系。
8.根據(jù)權(quán)利要求6所述的模糊查詢系統(tǒng),其特征在于,所述查找模塊包括用于采用二分法定位與所述查詢關(guān)鍵字匹配的匹配索引的第一子模塊和用于以所述匹配索引為端點(diǎn)獲取所述索引區(qū)間的邊界的第二子模塊。
9.根據(jù)權(quán)利要求6所述的模糊查詢系統(tǒng),其特征在于,還包括用于在所述全局索引中存儲(chǔ)索引值的查詢次數(shù),并緩存所述查詢次數(shù)大于閾值的索引值及與所述查詢次數(shù)大于閾值的索引值所對(duì)應(yīng)的數(shù)據(jù)項(xiàng)的緩存模塊。
10.根據(jù)權(quán)利要求9所述的模糊查詢系統(tǒng),其特征在于,所述查找模塊還用于在緩存中查找與所述查詢關(guān)鍵字匹配的索引值,并將緩存中的與所述查找到的索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回,以及將與所述查詢關(guān)鍵字匹配的索引值的查詢次數(shù)加I。
全文摘要
一種模糊查詢方法,包括以下步驟根據(jù)預(yù)設(shè)的索引值和數(shù)據(jù)項(xiàng)之間的映射關(guān)系對(duì)數(shù)據(jù)庫(kù)表建立全局索引;將所述全局索引排序;獲取查詢關(guān)鍵字,采用區(qū)間二分法查找與所述查詢關(guān)鍵字匹配的索引區(qū)間;獲取所述索引區(qū)間內(nèi)的索引值,根據(jù)所述映射關(guān)系獲取與所述索引值對(duì)應(yīng)的數(shù)據(jù)項(xiàng),并將所述數(shù)據(jù)項(xiàng)作為查詢結(jié)果返回。采用了上述模糊查詢方法和系統(tǒng),可以很好的利用二分查找方法時(shí)間復(fù)雜度低的優(yōu)勢(shì),在犧牲少量空間復(fù)雜度的情況下,換取較高的檢索速度,從而提高了檢索效率。
文檔編號(hào)G06F17/30GK103020054SQ20111028009
公開(kāi)日2013年4月3日 申請(qǐng)日期2011年9月20日 優(yōu)先權(quán)日2011年9月20日
發(fā)明者陳偉君 申請(qǐng)人:深圳市金蝶中間件有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
罗源县| 莱阳市| 金堂县| 如东县| 甘谷县| 大兴区| 昌黎县| 甘谷县| 衡东县| 扎赉特旗| 景洪市| 嘉兴市| 资阳市| 新乡市| 志丹县| 潜山县| 分宜县| 横峰县| 兴文县| 南通市| 库伦旗| 金山区| 浮山县| 丹东市| 新绛县| 四平市| 象山县| 尉犁县| 盖州市| 宕昌县| 莱阳市| 金门县| 白沙| 湟中县| 莒南县| 肃北| 林州市| 抚松县| 洛川县| 南靖县| 阿荣旗|