一、正排索引與倒排索引 1、什麼是正排索引呢? 以一本書為例,一般在書的開始都會有書的目錄,目錄裡面列舉了一本書有哪些章節,大概有哪些內容,以及所對應的頁碼數。這樣,我們在查找一些內容時,就可以通過目錄來定位到這些內容大概在哪頁。因此,書的目錄就可以稱之為正排索引(目錄頁)。 2、什麼時倒排索引呢? ...
一、正排索引與倒排索引
1、什麼是正排索引呢?
以一本書為例,一般在書的開始都會有書的目錄,目錄裡面列舉了一本書有哪些章節,大概有哪些內容,以及所對應的頁碼數。這樣,我們在查找一些內容時,就可以通過目錄來定位到這些內容大概在哪頁。因此,書的目錄就可以稱之為正排索引(目錄頁)。
2、什麼時倒排索引呢?
還是以一本書為例,在有些書的最後,會有以詞為單位的列表,指明瞭相應的詞分別出現在了哪些頁中,而這樣的列表就稱之為倒排索引(索引頁)。
3、兩者在搜索引擎中的對比
正排索引:文檔ID到文檔內容和單詞的關聯;
倒排索引:單詞到文檔ID的關聯;
如下表所示:
文檔ID | 文檔內容 |
1 | mastering elasticsearch |
2 | elasticsearch server |
3 | elasticsearch stack |
單詞 | 出現次數 | 文檔ID:出現位置 |
mastering | 1 | 1:0 |
elasticsearch | 3 | 1:1,2:0,3:0 |
server | 1 | 2:1 |
stack | 1 | 3:1 |
上述兩表就是正排索引與倒排索引的簡單結構說明。
4、倒排索引的組成
倒排索引由兩部分組成:
1)單詞詞典:它記錄了所有文檔的單詞,同時記錄了單詞到倒排列表的關聯關係。單詞詞典一般比較大,可以通過B+樹或哈希拉鏈法實現,以滿足高性能的插入與查詢。
2)倒排列表:它記錄單詞所對應的文檔組合體,主要是由倒排索引項組成的。
倒排索引項的內容包括:
a)文檔ID;
b)詞頻(Term Frequency),代表單詞在文檔中出現的次數,用於相關性打分;
c)位置(Position),表示單詞在文檔中分詞的位置,用於語句搜索;
d)偏移(Offset),記錄單詞開始和結束位置,用於實現高亮顯示;
二、分詞與分詞器
1、分詞:文本分析就是把全文轉換成一系列單詞(term/token)的過程,也叫做分詞。
2、分詞器:分詞是通過分詞器來實現的,它是專門處理分詞的組件。可以使用ElasticSearch內置的分詞器,也可以按需定製化分詞器。
因此,除了在數據寫入時用分詞器轉換詞條,在匹配查詢語句時,也需要用相同的分詞器對查詢語句進行分析。
分詞器由三部分組成:
1)Character Filters:它的主要作用是對原始文本進行處理,例如去除HTML標簽;
2)Tokenizer:主要作用是按照規則來切分單詞;
3)Token Filter:將切分好的單詞進行加工,例如:小寫轉換、刪除停用詞、增加同義詞;
ElasticSearch內置瞭如下分詞器:
1)Standard Analyzer:預設分詞器,按詞切分,轉小寫處理;
2)Simple Analyzer:按照非字母切分(符號被過濾),轉小寫處理;
3)Stop Analyzer:停用詞過濾(is/a/the),轉小寫處理;
4)WhiteSpace Analyzer:按照空格切分,轉小寫處理;
5)Keyword Analyzer:直接將輸入當作輸出,不分詞;
6)Pattern Analyzer:正則表達式分詞,預設\W+(非字元分隔);
7)Language:提供了30多種常見語言的分詞器;
8)Custom Analyzer:自定義分詞器;
3、中文分詞
1)我們採用analysis-icu插件進行中文分詞,可通過命令行:ElasticSearch-plugin install analysis-icu來安裝此插件。該插件提供了Unicode支持,可以更好的支持亞洲語言。如下圖所示:
2)社區中還有其他很好的分詞器,如下:
a)IK:支持自定義詞庫,支持熱更新分詞字典;下載地址:https://github.com/medcl/elasticsearch-analysis-ik
b)THULAC:THU Lexucal Analyzer for Chinese,由清華大學自然語言處理和社會人文計算實驗器出的一套中文分詞器;下載地址:https://github.com/microbun/elasticsearch-thulac-plugin
大家可關註我的公眾號
知識學習來源:《Elasticsearch核心技術與實戰》