索引基礎
了解幾個基本概念:倒排索引,單詞詞典,倒排列表,tf,df等
知道索引建立的大概流程,當拿到一篇文章(單字段),需要進行分詞,記錄一些資訊,組成倒排索引.寫入到磁碟中.
單詞詞典
建立好term到倒排列表的對映後,需要能快所的找到查詢的term,繼而獲取對應的倒排列表,進行其餘的操作,.主要有兩種方式
第一種是使用雜湊加鍊表的方式,將term先雜湊後存在對應位置上的煉表裡.
第二種是使用b+樹的方式來做(不知道如果控制查詢的)
倒排列表
上圖基本就是乙個簡單的倒排列表了,其中倒排索引項的前後一般不存文件的實際id而儲存兩個文件之間的差值.(減少空間)
索引建立
從原始文件到最終的倒排索引的過程有多種的方法來實現:
兩遍文件遍曆法:
所有的操作都在記憶體中進行,第一遍遍歷文件獲取整體的統計資訊(df,tf)算出總記憶體大小.開闢對應的空間對每個term.第二遍將每個term的倒排列表項存入開闢好的空間中.(記憶體不好控制,不好)
排序法:
開闢固定記憶體的空間,讀取文件到記憶體中,解析為term,建立乙個單詞id到單詞的對映詞典.將單詞id,文件id,詞頻這三項作為乙個單位從乙個文件中提取出來存在記憶體中,當經歷多個文件,分配的記憶體空間滿了後,將三項資訊寫入磁碟,清理除了單詞對映後的記憶體空間.
繼續上述過程直到所有文件讀取結果.將磁碟中的三元項讀取排序後,進行合併.整理成倒排索引的形式.
歸併法:
歸併法和排序法類似,優化了單詞對映這個過程.去除單詞對映改為每個快取都維護這乙個倒排列表,最後將所有的倒排列表進行合併
(最優化)
動態索引
當索引存入硬碟後再進行變更,去修改硬碟上資訊比較麻煩.可以再記憶體中再次構建乙個倒排列表來完成索引的更新.當刪除時,可以構建乙個已經刪除文件的列表及時間.進行查詢時根據三處的資訊綜合來得出最終的返回結果.
索引更新策略
完全重建策略:當記憶體中的新文件達到一定數量時,從新開始建立索引的過程,期間繼續維護來的索引和記憶體中的增量索引,將新的索引建立結束後,廢棄來的索引,使用新的索引
在合併策略: 遍歷新文件的倒排索引和老索引的倒排索引,合併其中相同的,新增新詞到新的倒排索引中
原地更新策略:在建立索引時叫保留一定的空間給需要增加的索引使用.當新增索引達到一定數量後,僅僅需要在磁碟中老索引後的空間追加相應的倒排列表項即可(存在空間不足的情況)
混合策略:將再合併策略和原地更新策略結合使用.對於高頻詞(倒排列表項多的)使用原地更新,低頻詞使用再合併.
查詢處理
一次一文件:根據倒排列表中磁碟中讀取多個term的倒排列表項,取其中之一從頭開始取出docid,計算該term的分數,根據id獲取其餘term中的docid及打分資訊,最後相加,得出乙個文件的最後得分,依次完成所有文件的打分,取topn返回.
一次一單詞:根據單詞獲取倒排列表,計算該單詞中每個docid的分數,,將多個term計算的分數相加.得出最終結果.
跳躍指標:在一次一單詞的基礎上考慮索引壓縮,解壓過程需要提高效率,引入跳躍指標,在一段範圍內儲存跳躍點,查詢第二個term計算相似度時可以根據指標範圍僅僅解壓一段來加快查詢.
多欄位索引
多索引方式:構建多個倒排列表,指定搜尋欄位時從指定搜尋欄位中查詢,合併返回結果
倒排列表:和原來的倒排索引很像,多加乙個資料儲存為所在字段是否存在
擴充套件列表方式:將各個字段設立擴充套件列表儲存,文件id及對應欄位再改文件中的索引範圍,查詢時根據倒排索引中儲存的位置資訊判斷改詞語是否在字段的索引範圍來決定是否在該字段中
短語查詢
但查詢短語時需要設定前後詞語的關係,索引中要能判斷出來
位置資訊索引:將term的倒排列表中儲存位置資訊,按照短語的位置關係進行組合判斷,能將包含短語的doc返回
雙詞索引:倒排索引對應的為兩個詞語,分為首次和下詞,下詞指向包含這個短語的倒排列表.當查詢短語時可以進行雙詞查詢後再次組合
短語索引: 將高頻短語通過資料探勘分析的方式,統計出來,將這部分詞語單獨做個短語索引的倒排索引
混合方法: 先進行短語索引,再進行雙詞索引最後是常規的方式來獲取結果
分布式索引
按文件劃分:根據文件id路由到不同的機器上,在次機器中建立倒排索引,當查詢乙個短語時,向每個機器傳送請求,進過查詢過程處理,獲取每個機器上的topk,返回到總機器中彙總,合併計算出topn返回
按單詞劃分:將單詞按照一定規則路由到不同的機器上,組成單詞到總文件的對映,當查詢時,對儲存的機器進行term的順序查詢,合併,
在最後的機器上完成整合合併過程,返回到中心機器.
Lucene建立索引的過程學習
version lucene 3.5 version lucene 3.5 了解lucene 的核心,我是從源 對比 lucene 的檔案格式 file formats 入手的。最核心的參考資料為 lucene 原理與源 分析完整版 儘管其版本為 3.0,但是對於 3.5的版本仍具有非常重要的參考價...
MySQL的索引建立的過程(二)
前面只是實現了乙個簡單的索引方案,因為我們假設的是所有的目錄項都是連續儲存的。而且乙個頁的大小是有限的,當資料量比較大的時候顯然是不行的,而且如果要將乙個目錄頁中的記錄刪除,則需要進行大量的資料移動。顯然這樣是不太好的。所以想乙個解決的方案。我們發現其實這個目錄項和我們的使用者記錄的資訊差不多,只不...
索引 學習總結
mysql中 sql seerver中 檢視索引 mysql設計索引的原則 sql server索引設計原則 索引的資料結構 聚集索引和非聚集索引 復合索引的使用 參考資料 索引是對資料庫表中乙個或多個列的值進行排序的結構,使用索引可快速訪問資料庫表中的特定資訊。通俗的講,索引就相當於目錄。優點 缺...