一種基于倒排索引的實時索引方法
【專利摘要】本發(fā)明提供一種基于倒排索引的實時索引方法,包括以下步驟:對數(shù)據(jù)進(jìn)行預(yù)處理;更新內(nèi)存索引庫;更新磁盤索引庫。本發(fā)明提供的基于倒排索引的實時索引方法,在保持盡量不影響檢索性能的前提下,消減用于更新的索引庫數(shù)量,同時去除內(nèi)存庫對數(shù)據(jù)量的限制,針對性的對多路處理器進(jìn)行優(yōu)化,更好的支持多路并發(fā)多線程的數(shù)據(jù)更新,提供更靈活的數(shù)據(jù)更新方式以及高效的數(shù)據(jù)更新效率,增強數(shù)據(jù)的及時性,給用戶以良好的檢索體驗。
【專利說明】一種基于倒排索引的實時索引方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種索引方法,具體涉及一種基于倒排索引的實時索引方法。
【背景技術(shù)】
[0002]對于文本索引領(lǐng)域,在不影響當(dāng)前系統(tǒng)正常運行的情況下對新數(shù)據(jù)以及更新
[0003]數(shù)據(jù)的實時快速索引一直都是需要公關(guān)的課題,其實時數(shù)據(jù)更新速度尤其對于資訊類的服務(wù)非常重要,直接影響到用戶體驗以及推送信息的及時性。目前檢索系統(tǒng)的實時更新方式形式多樣,但都是根據(jù)索引結(jié)構(gòu)進(jìn)行更新優(yōu)化,以盡量加快更新速度。按照索引更新方式基本都可以歸結(jié)為兩大類:
[0004](I)主索引庫+輔助索引庫
[0005]主索引庫包含絕大部分?jǐn)?shù)據(jù),輔助索引庫包含近期的索引數(shù)據(jù)以及需要更新的主索引庫中的數(shù)據(jù);輔助索引庫中的數(shù)據(jù)可以使用時間作為邊界,例如:輔助索引庫中只裝入當(dāng)天的數(shù)據(jù),外加主索引庫中的更新數(shù)據(jù);另外,在合適的時間對主索引庫和輔助索引庫進(jìn)行合并操作,生成新的主索引庫,同時清空輔助索引庫,為下一個時間段的數(shù)據(jù)加載及更新預(yù)留出空間;在檢索期間,會同時檢索主輔兩個索引庫,并對檢索結(jié)果進(jìn)行合并,生成最終的檢索結(jié)果。
[0006](2)多個磁盤索引庫+單個內(nèi)存索引庫
[0007]主要數(shù)據(jù)存儲于多個獨立的磁盤索引庫中,每一批的新數(shù)據(jù)以及歷史數(shù)據(jù)的更新都會加入到唯一的內(nèi)存索引庫中,每當(dāng)內(nèi)存索引庫中的數(shù)據(jù)達(dá)到設(shè)定的閾值,就會將內(nèi)存索引庫中的數(shù)據(jù),刷入一個全新的磁盤索引庫,同時清空內(nèi)存索引庫,為下一批數(shù)據(jù)預(yù)留索引空間;對于多個磁盤索引庫,會在合適的時機,按照一定的算法,進(jìn)行分步合并,以盡量減少磁盤索引庫的數(shù)量;在檢索期間,會同時檢索多個磁盤索引庫以及內(nèi)存索引庫,并對檢索結(jié)果進(jìn)行合并,生產(chǎn)最終的檢索結(jié)果。
[0008]基于主索引庫+輔助索引庫的方式,由于為了提高更新新能,縮短更新時間,輔助索引庫需要全部放入內(nèi)存中,隨著單一時間段內(nèi)數(shù)據(jù)量的增加,會導(dǎo)致輔助索引庫對內(nèi)存的大量消耗,必須對單一時間內(nèi)的更新數(shù)據(jù)量加以限制,這就極大的限制了這種技術(shù)的應(yīng)用場合;
[0009]基于多個磁盤索引庫+獨立內(nèi)存索引庫的方案,在內(nèi)存索引庫容量達(dá)到一定程度后,會將內(nèi)存庫刷入磁盤,這樣避免了內(nèi)存索引可的容量限制,但由于多個磁盤索引庫的存在,且不能及時的合并,會導(dǎo)致在檢索期間需要去查詢多個獨立的索引庫(多個磁盤庫+內(nèi)存庫),使檢索性能下降,影響用戶體驗。
【發(fā)明內(nèi)容】
[0010]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種基于倒排索引的實時索引方法,在保持盡量不影響檢索性能的前提下,消減用于更新的索引庫數(shù)量,同時去除內(nèi)存庫對數(shù)據(jù)量的限制,針對性的對多路處理器進(jìn)行優(yōu)化,更好的支持多路并發(fā)多線程的數(shù)據(jù)更新,提供更靈活的數(shù)據(jù)更新方式以及高效的數(shù)據(jù)更新效率,增強數(shù)據(jù)的及時性,給用戶以良好的檢索體驗。
[0011]為了實現(xiàn)上述發(fā)明目的,本發(fā)明采取如下技術(shù)方案:
[0012]本發(fā)明提供一種基于倒排索引的實時索引方法,其特征在于:所述方法包括以下步驟:
[0013]步驟1:對數(shù)據(jù)進(jìn)行預(yù)處理;
[0014]步驟2:更新內(nèi)存索引庫;
[0015]步驟3:更新磁盤索引庫。
[0016]所述步驟I包括以下步驟:
[0017]步驟1-1:對更新數(shù)據(jù)或新數(shù)據(jù)進(jìn)行解析;
[0018]步驟1-2:對解析后的數(shù)據(jù)進(jìn)行分詞;
[0019]步驟1-3:將分詞后的數(shù)據(jù)進(jìn)行預(yù)排序。
[0020]所述步驟1-1中,先根據(jù)索引配置文件挑選需要進(jìn)行索引的數(shù)據(jù),后對挑選出的數(shù)據(jù)進(jìn)行去噪處理,采用去除無用符號對數(shù)據(jù)進(jìn)行去噪處理,即完成對更新數(shù)據(jù)或新數(shù)據(jù)進(jìn)行解析。
[0021]所述步驟1-2中,先根據(jù)需要對待處理數(shù)據(jù)進(jìn)行分詞,后對分詞后的數(shù)據(jù)標(biāo)記詞語所在文檔的ID,字段號及位置。
[0022]所述步驟1-3中,先根據(jù)已標(biāo)記好詞語的分詞數(shù)據(jù)進(jìn)行統(tǒng)計,統(tǒng)計相同詞語出現(xiàn)的次數(shù)及位置,并對統(tǒng)計后的數(shù)據(jù)進(jìn)行預(yù)排序。
[0023]所述步驟2包括以下步驟:
[0024]步驟2-1:將經(jīng)過預(yù)排序的數(shù)據(jù)按照索引庫邏輯拆分規(guī)則進(jìn)行分堆;
[0025]步驟2-2:對分堆后的數(shù)據(jù)進(jìn)行倒序排列,同時倒需排列η堆的數(shù)據(jù),形成臨時索引庫;
[0026]步驟2-3:按照索引庫邏輯拆分規(guī)則,同時對現(xiàn)有內(nèi)存索引庫與形成的臨時索引庫進(jìn)行索引數(shù)據(jù)合并,形成新的內(nèi)存索引庫;
[0027]步驟2-4:使用新形成的內(nèi)存索引庫,替換在線的內(nèi)存索引庫,同時將新形成的內(nèi)存索引庫保存到本地磁盤,以備系統(tǒng)重啟恢復(fù)時使用;
[0028]步驟2-5:釋放被替換的內(nèi)存索引庫資源,完成本輪內(nèi)存索引庫更新。
[0029]所述步驟2-2中,根據(jù)系統(tǒng)負(fù)載及CPU使用情況啟動多個線程并發(fā)執(zhí)行,對分堆后的數(shù)據(jù)進(jìn)行倒序排序過程中,
[0030]所述步驟2-3中,根據(jù)當(dāng)前系統(tǒng)負(fù)載決定并發(fā)合并的數(shù)量,對現(xiàn)有內(nèi)存索引庫與形成的臨時索引庫引進(jìn)行索引數(shù)據(jù)合并,以加快索引數(shù)據(jù)合并速度。
[0031]所述步驟3包括以下步驟:
[0032]步驟3-1:內(nèi)存索引庫狀態(tài)切換;
[0033]步驟3-2:磁盤索引庫分堆合并;
[0034]步驟3-3:等待磁盤索引庫與臨時索引庫所有分組索引數(shù)據(jù)合并完成;
[0035]步驟3-4:取消臨時索引庫在檢索邏輯控制器注冊;
[0036]步驟3-5:保存磁盤索引庫信息到磁盤,以備恢復(fù)使用。
[0037]所述步驟3-1包括以下步驟:
[0038]步驟3-1-1:在檢索邏輯控制器中對磁盤索引庫更新狀態(tài)標(biāo)記進(jìn)行修改,改為正在更新狀態(tài);
[0039]步驟3-1-2:清空臨時索引庫,并將臨時索引庫初始化;
[0040]步驟3-1-3:將內(nèi)存索引庫與臨時索引庫進(jìn)行交換;
[0041]步驟3-1-4:注冊臨時索引庫到檢索邏輯控制器,使檢索過程中將對臨時索引庫進(jìn)行檢索;
[0042]步驟3-1-5:釋放并清空內(nèi)存索引庫使用的資源;
[0043]步驟3-1-6:在檢索邏輯控制器中修改磁盤索引庫更新狀態(tài)標(biāo)記,改為未更新狀態(tài)。
[0044]所述步驟3-2包括以下步驟:
[0045]步驟3-2-1:按照索引庫邏輯拆分規(guī)則,對磁盤索引庫和臨時索引庫進(jìn)行索引數(shù)據(jù)合并;
[0046]步驟3-2-2:索引數(shù)據(jù)合并完成后,刪除磁盤索引庫中對應(yīng)堆的磁盤索引數(shù)據(jù),并將使用新生成的對應(yīng)堆索引數(shù)據(jù)進(jìn)行替換;
[0047]步驟3-2-3:對索引數(shù)據(jù)合并過程進(jìn)行監(jiān)控,根據(jù)系統(tǒng)負(fù)載及CPU使用情況,增加或減小線程并發(fā)數(shù)量,以提高系統(tǒng)資源的利用率,加磁盤索引庫快的索引數(shù)據(jù)合并速度。
[0048]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
[0049]1.本發(fā)明采用并發(fā)多線程更新及臨時庫替換策略,對于更新效率以及減少多庫查詢導(dǎo)致的檢索效率下降都有明顯的改善;
[0050]2.同時可以盡量最大化的利用系統(tǒng)資源對更新性能的提升提供更強有力的支持,提升用戶體驗,;
[0051]3.從內(nèi)存索引庫和磁盤索引庫的更新流程上,考慮多線程并發(fā)更新的策略,充分利用現(xiàn)代計算機多路多核CPU的優(yōu)勢,充分利用CPU資源,提高索引更新性能,縮短更新時間;
[0052]4.對比以往更新索引方式,本發(fā)明極大的減少了更新期間的索引庫數(shù)量,避免了檢索期間對多個索引庫的檢索,提高了檢索性能;
[0053]5.避免了內(nèi)存索引庫對數(shù)據(jù)量的限制性,適用范圍更為廣泛。
【專利附圖】
【附圖說明】
[0054]圖1是本發(fā)明實施例中內(nèi)存索引庫更新流程圖;
[0055]圖2是本發(fā)明實施例中磁盤索引庫更新流程圖。
【具體實施方式】
[0056]下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0057]本發(fā)明提供一種基于倒排索引的實時索引方法,其特征在于:所述方法包括以下步驟:
[0058]步驟1:對數(shù)據(jù)進(jìn)行預(yù)處理;
[0059]步驟2:更新內(nèi)存索引庫;
[0060]步驟3:更新磁盤索引庫。
[0061]所述步驟I包括以下步驟:
[0062]步驟1-1:對更新數(shù)據(jù)或新數(shù)據(jù)進(jìn)行解析;
[0063]步驟1-2:對解析后的數(shù)據(jù)進(jìn)行分詞;
[0064]步驟1-3:將分詞后的數(shù)據(jù)進(jìn)行預(yù)排序。
[0065]所述步驟1-1中,先根據(jù)索引配置文件挑選需要進(jìn)行索引的數(shù)據(jù),后對挑選出的數(shù)據(jù)進(jìn)行去噪處理,采用去除無用符號對數(shù)據(jù)進(jìn)行去噪處理,即完成對更新數(shù)據(jù)或新數(shù)據(jù)進(jìn)行解析。
[0066]所述步驟1-2中,先根據(jù)需要對待處理數(shù)據(jù)進(jìn)行分詞,后對分詞后的數(shù)據(jù)標(biāo)記詞語所在文檔的ID,字段號及位置。
[0067]所述步驟1-3中,先根據(jù)已標(biāo)記好詞語的分詞數(shù)據(jù)進(jìn)行統(tǒng)計,統(tǒng)計相同詞語出現(xiàn)的次數(shù)及位置,并對統(tǒng)計后的數(shù)據(jù)進(jìn)行預(yù)排序。
[0068]如圖1,所述步驟2包括以下步驟:
[0069]步驟2-1:將經(jīng)過預(yù)排序的數(shù)據(jù)按照索引庫邏輯拆分規(guī)則進(jìn)行分堆;
[0070]步驟2-2:對分堆后的數(shù)據(jù)進(jìn)行倒序排列,同時倒需排列η堆的數(shù)據(jù),形成臨時索引庫;
[0071]步驟2-3:按照索引庫邏輯拆分規(guī)則,同時對現(xiàn)有內(nèi)存索引庫與形成的臨時索引庫進(jìn)行索引數(shù)據(jù)合并,形成新的內(nèi)存索引庫;
[0072]步驟2-4:使用新形成的內(nèi)存索引庫,替換在線的內(nèi)存索引庫,同時將新形成的內(nèi)存索引庫保存到本地磁盤,以備系統(tǒng)重啟恢復(fù)時使用;
[0073]步驟2-5:釋放被替換的內(nèi)存索引庫資源,完成本輪內(nèi)存索引庫更新。
[0074]所述步驟2-2中,根據(jù)系統(tǒng)負(fù)載及CPU使用情況啟動多個線程并發(fā)執(zhí)行,對分堆后的數(shù)據(jù)進(jìn)行倒序排序過程中,
[0075]所述步驟2-3中,根據(jù)當(dāng)前系統(tǒng)負(fù)載決定并發(fā)合并的數(shù)量,對現(xiàn)有內(nèi)存索引庫與形成的臨時索引庫引進(jìn)行索引數(shù)據(jù)合并,以加快索引數(shù)據(jù)合并速度。
[0076]如圖2,所述步驟3包括以下步驟:
[0077]步驟3-1:內(nèi)存索引庫狀態(tài)切換;
[0078]步驟3-2:磁盤索引庫分堆合并;
[0079]步驟3-3:等待磁盤索引庫與臨時索引庫所有分組索引數(shù)據(jù)合并完成;
[0080]步驟3-4:取消臨時索引庫在檢索邏輯控制器注冊;
[0081]步驟3-5:保存磁盤索引庫信息到磁盤,以備恢復(fù)使用。
[0082]所述步驟3-1包括以下步驟:
[0083]步驟3-1-1:在檢索邏輯控制器中對磁盤索引庫更新狀態(tài)標(biāo)記進(jìn)行修改,改為正在更新狀態(tài);
[0084]步驟3-1-2:清空臨時索引庫,并將臨時索引庫初始化;
[0085]步驟3-1-3:將內(nèi)存索引庫與臨時索引庫進(jìn)行交換;
[0086]步驟3-1-4:注冊臨時索引庫到檢索邏輯控制器,使檢索過程中將對臨時索引庫進(jìn)行檢索;
[0087]步驟3-1-5:釋放并清空內(nèi)存索引庫使用的資源;
[0088]步驟3-1-6:在檢索邏輯控制器中修改磁盤索引庫更新狀態(tài)標(biāo)記,改為未更新狀態(tài)。
[0089]所述步驟3-2包括以下步驟:
[0090]步驟3-2-1:按照索引庫邏輯拆分規(guī)則,對磁盤索引庫和臨時索引庫進(jìn)行索引數(shù)據(jù)合并;
[0091]步驟3-2-2:索引數(shù)據(jù)合并完成后,刪除磁盤索引庫中對應(yīng)堆的磁盤索引數(shù)據(jù),并將使用新生成的對應(yīng)堆索引數(shù)據(jù)進(jìn)行替換;
[0092]步驟3-2-3:對索引數(shù)據(jù)合并過程進(jìn)行監(jiān)控,根據(jù)系統(tǒng)負(fù)載及CPU使用情況,增加或減小線程并發(fā)數(shù)量,以提高系統(tǒng)資源的利用率,加磁盤索引庫快的索引數(shù)據(jù)合并速度。
[0093]最后應(yīng)當(dāng)說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其限制,所屬領(lǐng)域的普通技術(shù)人員參照上述實施例依然可以對本發(fā)明的【具體實施方式】進(jìn)行修改或者等同替換,這些未脫離本發(fā)明精神和范圍的任何修改或者等同替換,均在申請待批的本發(fā)明的權(quán)利要求保護范圍之內(nèi)。
【權(quán)利要求】
1.一種基于倒排索引的實時索引方法,其特征在于:所述方法包括以下步驟: 步驟1:對數(shù)據(jù)進(jìn)行預(yù)處理; 步驟2:更新內(nèi)存索引庫; 步驟3:更新磁盤索引庫。
2.根據(jù)權(quán)利要求1所述的基于倒排索引的實時索引方法,其特征在于:所述步驟I包括以下步驟: 步驟1-1:對更新數(shù)據(jù)或新數(shù)據(jù)進(jìn)行解析; 步驟1-2:對解析后的數(shù)據(jù)進(jìn)行分詞; 步驟1-3:將分詞后的數(shù)據(jù)進(jìn)行預(yù)排序。
3.根據(jù)權(quán)利要求2所述的基于倒排索引的實時索引方法,其特征在于:所述步驟1-1中,先根據(jù)索引配置文件挑選需要進(jìn)行索引的數(shù)據(jù),后對挑選出的數(shù)據(jù)進(jìn)行去噪處理,采用去除無用符號對數(shù)據(jù)進(jìn)行去噪處理,即完成對更新數(shù)據(jù)或新數(shù)據(jù)進(jìn)行解析。
4.根據(jù)權(quán)利要求2所述的基于倒排索引的實時索引方法,其特征在于:所述步驟1-2中,先根據(jù)需要對待處理數(shù)據(jù)進(jìn)行分詞,后對分詞后的數(shù)據(jù)標(biāo)記詞語所在文檔的ID,字段號及位置。
5.根據(jù)權(quán)利要求2所述的基于倒排索引的實時索引方法,其特征在于:所述步驟1-3中,先根據(jù)已標(biāo)記好詞語的分詞數(shù)據(jù)進(jìn)行統(tǒng)計,統(tǒng)計相同詞語出現(xiàn)的次數(shù)及位置,并對統(tǒng)計后的數(shù)據(jù)進(jìn)行預(yù)排序。
6.根據(jù)權(quán)利要求2所述的基于倒排索引的實時索引方法,其特征在于:所述步驟2包括以下步驟: 步驟2-1:將經(jīng)過預(yù)排序的數(shù)據(jù)按照索引庫邏輯拆分規(guī)則進(jìn)行分堆; 步驟2-2:對分堆后的數(shù)據(jù)進(jìn)行倒序排列,同時倒需排列η堆的數(shù)據(jù),形成臨時索引庫; 步驟2-3:按照索引庫邏輯拆分規(guī)則,同時對現(xiàn)有內(nèi)存索引庫與形成的臨時索引庫進(jìn)行索引數(shù)據(jù)合并,形成新的內(nèi)存索引庫; 步驟2-4:使用新形成的內(nèi)存索引庫,替換在線的內(nèi)存索引庫,同時將新形成的內(nèi)存索引庫保存到本地磁盤,以備系統(tǒng)重啟恢復(fù)時使用; 步驟2-5:釋放被替換的內(nèi)存索引庫資源,完成本輪內(nèi)存索引庫更新。
7.根據(jù)權(quán)利要求6所述的基于倒排索引的實時索引方法,其特征在于:所述步驟2-2中,根據(jù)系統(tǒng)負(fù)載及CPU使用情況啟動多個線程并發(fā)執(zhí)行,對分堆后的數(shù)據(jù)進(jìn)行倒序排序過程中, 所述步驟2-3中,根據(jù)當(dāng)前系統(tǒng)負(fù)載決定并發(fā)合并的數(shù)量,對現(xiàn)有內(nèi)存索引庫與形成的臨時索引庫引進(jìn)行索引數(shù)據(jù)合并,以加快索引數(shù)據(jù)合并速度。
8.根據(jù)權(quán)利要求1所述的基于倒排索引的實時索引方法,其特征在于:所述步驟3包括以下步驟: 步驟3-1:內(nèi)存索引庫狀態(tài)切換; 步驟3-2:磁盤索引庫分堆合并; 步驟3-3:等待磁盤索引庫與臨時索引庫所有分組索引數(shù)據(jù)合并完成; 步驟3-4:取消臨時索引庫在檢索邏輯控制器注冊; 步驟3-5:保存磁盤索引庫信息到磁盤,以備恢復(fù)使用。
9.根據(jù)權(quán)利要求8所述的基于倒排索引的實時索引方法,其特征在于:所述步驟3-1包括以下步驟: 步驟3-1-1:在檢索邏輯控制器中對磁盤索引庫更新狀態(tài)標(biāo)記進(jìn)行修改,改為正在更新狀態(tài); 步驟3-1-2:清空臨時索引庫,并將臨時索引庫初始化; 步驟3-1-3:將內(nèi)存索引庫與臨時索引庫進(jìn)行交換; 步驟3-1-4:注冊臨時索引庫到檢索邏輯控制器,使檢索過程中將對臨時索引庫進(jìn)行檢索; 步驟3-1-5:釋放并清空內(nèi)存索引庫使用的資源; 步驟3-1-6:在檢索邏輯控制器中修改磁盤索引庫更新狀態(tài)標(biāo)記,改為未更新狀態(tài)。
10.根據(jù)權(quán)利要求8所述的基于倒排索引的實時索引方法,其特征在于:所述步驟3-2包括以下步驟: 步驟3-2-1:按照索引庫邏輯拆分規(guī)則,對磁盤索引庫和臨時索引庫進(jìn)行索引數(shù)據(jù)合并; 步驟3-2-2:索引數(shù)據(jù)合并完成后,刪除磁盤索引庫中對應(yīng)堆的磁盤索引數(shù)據(jù),并將使用新生成的對應(yīng)堆索引數(shù)據(jù)進(jìn)行替換; 步驟3-2-3:對索引數(shù)據(jù)合并過程進(jìn)行監(jiān)控,根據(jù)系統(tǒng)負(fù)載及CPU使用情況,增加或減小線程并發(fā)數(shù)量,以提高系統(tǒng)資源的利用率,加磁盤索引庫快的索引數(shù)據(jù)合并速度。
【文檔編號】G06F17/30GK104361009SQ201410536018
【公開日】2015年2月18日 申請日期:2014年10月11日 優(yōu)先權(quán)日:2014年10月11日
【發(fā)明者】張宏利, 高勇, 秦飛, 樊云紅, 郭永福 申請人:北京中搜網(wǎng)絡(luò)技術(shù)股份有限公司