索引在生活中存在方方面面的應用。比如你去超市,超市把商品分了不同的區間,日用平、生鮮、糧油、飲料等等,比如你去買可樂,直接去立著飲料牌子的區間去找就可以,不用去挨著尋找,那這裡的「牌子」就是索引。再以字典為例,要找「趙」這個字的詳細解釋,你不需要捧著厚厚的字典從頭到尾找,只要翻到z字母所在區間去找就可以了。
由上所述,索引的目的就是幫助你快速查詢目標。如果以資訊的角度講,索引就是一批具有順序的資料結構,形成檔案儲存在介質中,幫助快速定位到資料。
倒排索引源於實際應用中需要根據屬性的值來查詢記錄。這種索引表中的每一項都包括乙個屬性值和具有該屬性值的各記錄的位址。由於不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(inverted index)。帶有倒排索引的檔案我們稱為倒排索引檔案,簡稱倒排檔案(inverted file)。說的好像不是那麼簡潔明瞭,通過後面的案例實踐,也許會對這一概念有更深的理解。
首先介紹倒排索引計算所依賴的一些其它概念。
在全文檢索技術中,對文字資料做字、詞、段的加工處理,形成乙個或多個詞項(term)。
例如文字:「我的名字叫趙利文」不同的分詞器,演算法不同,對字、詞、段的處理結果也不同。專門用來處理英文的分詞器對中文的處理可能不是特別準確到位。字的處理:我 的 名 字 叫 趙 利 文
詞的處理: 我的 名字 趙利文
段落的處理:我的名字叫趙利文
對雜亂無序的資料進行整理,形成結構化的資料物件,就叫文件物件。不同的文件物件可以分為不同的屬性。比如網頁,就可以有標題、**、網頁簡介、網頁內容等文件屬性。再比如商品資訊,可以有商品名稱、商品**、商品等文件屬性。
文件物件的屬性,就稱為域屬性。通過對域屬性進行分詞,為索引的建立提供重要保障。域屬性可以作為文件的私有屬性,比如不需要進行分詞的網頁位址、位址、**等內容。
之所以搜尋引擎可以快速在海量的資料中查詢出你想要的資料,索引檔案起到的作用舉足輕重。 lucene將原始資料經過一些列加工處理,形成了可以被識別和計算的索引檔案。
我們以兩個網頁來舉例。
網頁1:
網頁2:
爬蟲將兩個網頁抓取之後,建立document。
網頁1:
id:did1
title:全球與新冠病毒長期共存,中國該怎麼辦
origin:國是直通車
content:新冠病毒長期存在,將對人類社會帶來諸多改變。中國應為此作何準備
網頁2:
id:did2
title:中國和巴西展開新冠病毒疫苗合作
origin:新華社客戶端
content:聖保羅州將與中國實驗室合作生產和測試新冠病毒疫苗。
對文件物件進行分詞計算,得到詞項。
did1
中國(2)新冠病毒(2)人類(1)
did2
中國(1)巴西(1)新冠病毒(2)疫苗(2)
以**的形式,對分詞做記錄:
詞項\id
did1
did2
did3…中國
1000
疫苗010
0新冠病毒11
00巴西0
100人類
1000
讀取上述**就可以得到每個詞項的二進位制資料(倒排索引表):
中國:1000
疫苗:0100
新冠病毒:1100
巴西:0100
人類:1000
倒排索引與全文檢索
乙個未經處理的資料庫中,一般是以文件id作為索引,文件內容作為記錄 而倒排索引指的是,將單詞或記錄作為索引,將文件id作為記錄,這樣便可以方便地通過索引來查詢到其所在的文件 例如 流程 將資料庫中的結構化資料資料轉換為非結構化資料 然後將非結構化資料轉化為分詞結構 配置與使用 syl setting...
倒排索引與全文檢索
乙個未經處理的資料庫中,一般是以文件id作為索引,文件內容作為記錄 而倒排索引指的是,將單詞或記錄作為索引,將文件id作為記錄,這樣便可以方便地通過索引來查詢到其所在的文件 例如 流程 將資料庫中的結構化資料資料轉換為非結構化資料 然後將非結構化資料轉化為分詞結構 配置與使用 syl setting...
全文檢索和倒排索引原理講解
正排表是以文件的id為關鍵字,表中記錄文件中每個字的位置資訊,查詢時掃瞄表中每個文件中字的資訊直到找出所有包含查詢關鍵字的文件。正排表結構如圖1所示,這種組織方法在建立索引的時候結構比較簡單,建立比較方便且易於維護 因為索引是基於文件建立的,若是有新的文件加入,直接為該文件建立乙個新的索引塊,掛接在...