《從Lucene到Elasticsearch:全文檢索實戰》學習筆記三
今天我給大家講講倒排索引。
索引是構成搜索引擎的核心技術之一,它在日常生活中是非常常見的,比如我看一本書的時候,我首先會看書的目錄,通過目錄可以快速定位到具體章節的頁碼,加快對內容的查詢速度。
文檔通常保存在各種數據庫管理系統之中,比如mysql,oracle等,但是搜索引擎的數據不能保存在數據庫,主要原因有兩點:一是搜索引擎的數據量非常龐大,大型搜索引擎需要處理數以億計的網頁數據,面對海量數據數據庫很難管理。二是搜索引擎對數據的操作比較簡單,一般的增刪改查就夠用了,而數據庫支持的數據庫操作是比較復雜的,犧牲了速度和空間,而搜索引擎要求響應快,信息檢索效率高,在搜索引擎中主要使用倒排索引存儲網頁數據。
倒排索引也叫反向索引,是一種索引方法,用來存儲在在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射,它是文檔檢索系統中最常用的數據結構。
下面以通俗的例子解釋一下倒排索引,該例子取自於書中內容:有兩個文檔doc1和doc2,doc包含中國、美國、韓國,doc2中包含4個關鍵詞:中國、美國、德國、英國,文檔和詞語的關系如下:
文檔 | 詞語 |
doc1 | 中國、美國、韓國 |
doc2 | 英國、中國、美國、德國 |
詞語所屬的文檔關系如下:
詞語 | 文檔 |
中國 | doc1、doc2 |
美國 | doc1、doc2 |
韓國 | doc1 |
英國 | doc2 |
德國 | doc2 |
參考下表,我們深入理解一下倒排索引,我們給每個文檔設置文檔ID
文檔ID | 文檔內容 |
1 | 人工智能成為互聯網大會焦點 |
2 | 谷歌推出開源人工智能系統工具 |
3 | 互聯網的未來在人工智能 |
4 | 谷歌開源機器學習工具 |
對於文檔內容,先要經過詞條化處理。和英文不同的是,英語通過空格分隔單詞,中文的詞與詞之間沒有明確的分隔符號,經過分詞系統進行中文分詞以後把矩陣切分成一個個詞條,文檔4被分成“谷歌” “開源” “機器” “學習” “工具” 5個詞項。谷歌這個詞在文檔2和文檔4中各出現一次,文檔頻率為2,倒排記錄表記作2->4,文檔頻率也是倒排記錄表的長度。依次統計各個詞項的文檔頻率和倒排記錄表,構建倒排索引過程如下:
詞項 | 文檔頻率 | 倒排記錄表 |
人工 | 3 | 1->2->3 |
智能 | 3 | 1->2->3 |
成為 | 1 | 1 |
互聯網 | 2 | 1->3 |
---------------------
作者:柯之夢
來源:CSDN
原文:https://blog.csdn.net/yin4302008/article/details/85928590
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
《從Lucene到Elasticsearch:全文檢索實戰》學習筆記三