欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于字符串后綴的數(shù)據(jù)索引方法與流程

文檔序號(hào):12034747閱讀:608來源:國知局

本發(fā)明涉及數(shù)據(jù)索引領(lǐng)域,具體涉及一種基于字符串后綴的數(shù)據(jù)索引方法。



背景技術(shù):

就目前而言,數(shù)據(jù)模糊查詢的方法主要有以下三種:

通過數(shù)據(jù)庫自身提供的“l(fā)ike”模糊匹配查詢功能。

這種方式雖然簡單易用,但是無法用到索引。數(shù)據(jù)量不大時(shí),還可以承受;但數(shù)據(jù)量稍大,查詢的速度就非常慢了,難以滿足融合媒體時(shí)代的需求。

通過數(shù)據(jù)庫的擴(kuò)展功能,如利用db全文索引(如mysql中提供的fulltextmatch函數(shù))。

這種方式的缺點(diǎn)主要源于國內(nèi)外語言文化的差異,在中文分詞上存在很大缺陷,不能很好地支持中文字符的檢索。雖然有些國內(nèi)人士通過開發(fā)相應(yīng)的插件滿足了中文檢索的需求,但是在以下兩種情況下卻表現(xiàn)出了索引滯后性:一方面,為避免檢索過程中出現(xiàn)漏數(shù)據(jù)、數(shù)據(jù)不準(zhǔn)確的情況,需要人為干預(yù)維護(hù)索引庫;另外,由于詞庫是基于分詞的,在執(zhí)行不具有明顯詞義的查詢時(shí),無法檢索到想要的數(shù)據(jù)。

通過第三方平臺(tái)提供全文檢索的功能,如:lucene、solr。

這種方式不僅存在第二種方式的問題,索引更新延遲較長、無法做到事務(wù)一致性等問題,而且搭建非常復(fù)雜。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種基于字符串后綴的數(shù)據(jù)索引方法,該方法從非拉丁語系的語言體系出發(fā),以字符為單位利用字符串后綴排序算法以及b+樹算法構(gòu)建索引,解決模糊查詢的效率和準(zhǔn)確度問題。

本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的:

一種基于字符串后綴的數(shù)據(jù)索引方法,包括創(chuàng)建索引步驟和數(shù)據(jù)索引步驟,所述創(chuàng)建索引步驟包括以下子步驟:

s1:寫入數(shù)據(jù),并提取元數(shù)據(jù)、行id、添加字符串后綴;

s2:建立索引,基于字符串后綴對(duì)所有字符進(jìn)行排列組合分詞并對(duì)分詞進(jìn)行排序,利用b+樹算法構(gòu)建索引;

s3:事務(wù)判斷,對(duì)寫入數(shù)據(jù)事務(wù)進(jìn)行判定,若寫入成功則解開事務(wù)鎖;若寫入失敗,則進(jìn)行邏輯刪除并回收數(shù)據(jù);

所述數(shù)據(jù)索引步驟包括以下子步驟

s01:索引匹配,計(jì)算索引對(duì)應(yīng)的編碼數(shù)值并將該編碼數(shù)值在b+樹中匹配;

s02:獲取索引指針列表,在b+樹中快速定位到索引的編碼數(shù)值,該數(shù)值的葉子節(jié)點(diǎn)即為包含該索引關(guān)鍵字的索引指針列表;

s03:讀取數(shù)據(jù),根據(jù)索引指針數(shù)組找到索引結(jié)果,對(duì)索引結(jié)果進(jìn)行判斷,若索引緩存區(qū)的時(shí)間戳與原始數(shù)據(jù)的時(shí)間戳一致,則直接返回結(jié)果;若不一致,則讀取原始數(shù)據(jù)的值,并將原始數(shù)據(jù)同步給索引緩存區(qū),更新索引。

進(jìn)一步的,所述的步驟s1寫入數(shù)據(jù)包括以下子步驟:

s11:修改或插入新數(shù)據(jù)形成新表,開啟事務(wù)鎖,鎖定新表,避免臟數(shù)據(jù);

s12:將新表數(shù)據(jù)同步到舊表,新表和舊表之間通過時(shí)間戳保證數(shù)據(jù)一致性;

s13:將更新的數(shù)據(jù)拷貝到索引緩存區(qū),并提取元數(shù)據(jù)、行id、添加字符串后綴。

進(jìn)一步的,所述的索引緩存區(qū)的數(shù)據(jù)結(jié)構(gòu)如下:

索引緩存區(qū)的每一條數(shù)據(jù)都由元數(shù)據(jù)、行id和數(shù)據(jù)內(nèi)容構(gòu)成;

元數(shù)據(jù):包括時(shí)間戳、索引+長度等。時(shí)間戳用于判斷索引緩存區(qū)的數(shù)據(jù)與原始數(shù)據(jù)是否相同,若不相同則同步數(shù)據(jù);索引+長度可以確定索引的詞組;

行id:記錄該條數(shù)據(jù)的行id,相同的詞組可能出現(xiàn)在不同的數(shù)據(jù)中,行id作為數(shù)據(jù)條目的區(qū)分;

數(shù)據(jù)內(nèi)容:包括數(shù)據(jù)內(nèi)容及字符串后綴,以字符為單位加5個(gè)字符或6個(gè)字符的字符串后綴,字符串后綴用于排列組合進(jìn)行分詞建立索引。

進(jìn)一步的,所述的步驟s2建立索引包括以下子步驟:

s21:基于字符串后綴采用后綴排序算法對(duì)這條數(shù)據(jù)的所有字符進(jìn)行排列組合分詞;

s22:按拼音+編碼的方式計(jì)算分詞的數(shù)值并進(jìn)行排序;

s23:將排好的序列利用b+樹算法構(gòu)建索引,其中b+樹的分支節(jié)點(diǎn)保存下級(jí)節(jié)點(diǎn)范圍數(shù)組,b+樹的葉子節(jié)點(diǎn)保存索引緩存區(qū)指針列表數(shù)組。

進(jìn)一步的,所述的步驟s01索引匹配具體包括根據(jù)索引和長度計(jì)算該索引對(duì)應(yīng)的編碼數(shù)值,將計(jì)算出的編碼數(shù)值在b+樹中匹配。

進(jìn)一步的,所述的步驟s02獲取索引指針列表具體包括,b+樹的分支節(jié)點(diǎn)表示其下級(jí)節(jié)點(diǎn)的編碼數(shù)值范圍,依次對(duì)范圍進(jìn)行判定,快速定位到索引的編碼數(shù)值,該數(shù)值的葉子節(jié)點(diǎn)即為包含該索引關(guān)鍵字的索引指針列表。

進(jìn)一步的,所述的步驟s03讀取數(shù)據(jù)包括:根據(jù)索引指針數(shù)組指向的行id,找到索引緩存區(qū)的索引結(jié)果;對(duì)索引緩存區(qū)的索引結(jié)果進(jìn)行判斷,若索引緩存區(qū)的時(shí)間戳與原始數(shù)據(jù)的時(shí)間戳一致,則直接返回結(jié)果;若不一致,則讀取原始數(shù)據(jù)的值,并將原始數(shù)據(jù)同步給索引緩存區(qū),更新索引。

本發(fā)明的有益效果是:本發(fā)明能夠有效支持“l(fā)ike”類模糊匹配,并且支持索引,避免了大量數(shù)據(jù)情況下“l(fā)ike”類模糊匹配全表檢索的瓶頸,能夠顯著提高查詢效率;本發(fā)明從非拉丁語系的語言系統(tǒng)出發(fā),能很好地支持中文的全文檢索:每一條數(shù)據(jù)都基于字符做排列組合,能夠支持不具有明顯詞義的檢索,另外也無需人為去維護(hù)索引,不存在索引的滯后性。

附圖說明

圖1是本發(fā)明的流程圖。

具體實(shí)施方式

下面結(jié)合附圖進(jìn)一步詳細(xì)描述本發(fā)明的技術(shù)方案,但本發(fā)明的保護(hù)范圍不局限于以下所述。

如圖1所示,

一種基于字符串后綴的數(shù)據(jù)索引方法,具體包括以下兩部分;

【創(chuàng)建索引的過程】

s1:寫入數(shù)據(jù)

修改或插入新數(shù)據(jù)形成新表,開啟事務(wù)鎖,鎖定新表,避免臟數(shù)據(jù)。

將新表數(shù)據(jù)同步到舊表,新表和舊表之間通過時(shí)間戳保證數(shù)據(jù)一致性。

將更新的數(shù)據(jù)拷貝到索引緩存區(qū),并提取元數(shù)據(jù)、行id、添加字符串后綴。

索引緩存區(qū)的作用主要有兩點(diǎn):一、保護(hù)原始數(shù)據(jù),二、提取和存儲(chǔ)元數(shù)據(jù),建立索引。

索引緩存區(qū)的每一條數(shù)據(jù)都由元數(shù)據(jù)、行id和數(shù)據(jù)內(nèi)容構(gòu)成。

元數(shù)據(jù):包括時(shí)間戳、索引+長度等。時(shí)間戳用于判斷索引緩存區(qū)的數(shù)據(jù)與原始數(shù)據(jù)是否相同,若不相同則同步數(shù)據(jù);索引+長度可以確定索引的詞組。

行id:記錄該條數(shù)據(jù)的行id,相同的詞組可能出現(xiàn)在不同的數(shù)據(jù)中,行id作為數(shù)據(jù)條目的區(qū)分。

數(shù)據(jù)內(nèi)容:包括數(shù)據(jù)內(nèi)容及字符串后綴,以字符為單位加5個(gè)字符或6個(gè)字符的字符串后綴,字符串后綴用于排列組合進(jìn)行分詞建立索引。

s2:建立索引

基于字符串后綴采用后綴排序算法對(duì)這條數(shù)據(jù)的所有字符進(jìn)行排列組合分詞。

按拼音+編碼的方式計(jì)算分詞的數(shù)值并進(jìn)行排序

將排好的序列利用b+樹算法構(gòu)建索引,具體如下:

lb+樹的分支節(jié)點(diǎn)保存下級(jí)節(jié)點(diǎn)范圍數(shù)組

lb+樹的葉子節(jié)點(diǎn)保存索引緩存區(qū)指針列表數(shù)組

s3:事務(wù)判定

對(duì)寫入數(shù)據(jù)事務(wù)進(jìn)行判定,若寫入成功則解開事務(wù)鎖;若寫入失敗,則進(jìn)行邏輯刪除并回收數(shù)據(jù)。

【數(shù)據(jù)索引的過程】

s11:索引匹配

根據(jù)索引和長度計(jì)算該索引對(duì)應(yīng)的編碼數(shù)值

將計(jì)算出的編碼數(shù)值在b+樹中匹配

s12:獲取索引指針列表

b+樹的分支節(jié)點(diǎn)表示其下級(jí)節(jié)點(diǎn)的編碼數(shù)值范圍,依次對(duì)范圍進(jìn)行判定,快速定位到索引的編碼數(shù)值,該數(shù)值的葉子節(jié)點(diǎn)即為包含該索引關(guān)鍵字的索引指針列表

s13:讀取數(shù)據(jù)

根據(jù)索引指針數(shù)組指向的行id,找到索引緩存區(qū)的索引結(jié)果。

對(duì)索引緩存區(qū)的索引結(jié)果進(jìn)行判斷,若索引緩存區(qū)的時(shí)間戳與原始數(shù)據(jù)的時(shí)間戳一致,則直接返回結(jié)果;若不一致,則讀取原始數(shù)據(jù)的值,并將原始數(shù)據(jù)同步給索引緩存區(qū),更新索引。

如圖1所示,其具體的工作原理如下:

開始;

修改或插入新數(shù)據(jù)形成新表;

開啟事務(wù)鎖;

寫入數(shù)據(jù),將新表數(shù)據(jù)同步到舊表;

將原始數(shù)據(jù)拷貝到索引緩存區(qū)或索引元數(shù)據(jù)區(qū);

對(duì)數(shù)據(jù)進(jìn)行排列組合分詞;

對(duì)分詞按拼音+編碼進(jìn)行排序;

構(gòu)建b+樹數(shù)據(jù)索引;

判斷;

成功,解開事務(wù)鎖,索引停止。

失敗,邏輯刪除,回收器進(jìn)行數(shù)據(jù)回收,索引停止。

以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)理解本發(fā)明并非局限于本文所披露的形式,不應(yīng)看作是對(duì)其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識(shí)進(jìn)行改動(dòng)。而本領(lǐng)域人員所進(jìn)行的改動(dòng)和變化不脫離本發(fā)明的精神和范圍,則都應(yīng)在本發(fā)明所附權(quán)利要求的保護(hù)范圍內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
泰安市| 咸阳市| 连平县| 多伦县| 固阳县| 红安县| 西平县| 扶沟县| 三门峡市| 恩平市| 通山县| 普安县| 东城区| 四川省| 泰宁县| 台州市| 夏河县| 柳河县| 民勤县| 辉南县| 鄄城县| 兴仁县| 天津市| 中阳县| 新巴尔虎右旗| 台东县| 凤翔县| 色达县| 遵义市| 定兴县| 城步| 金塔县| 米泉市| 华容县| 海淀区| 友谊县| 广昌县| 宣城市| 隆昌县| 宣恩县| 韶山市|