1、正排索引與倒排索引git
一、什麼是正排索引呢?github
以一本書爲例,通常在書的開始都會有書的目錄,目錄裏面列舉了一本書有哪些章節,大概有哪些內容,以及所對應的頁碼數。這樣,咱們在查找一些內容時,就能夠經過目錄來定位到這些內容大概在哪頁。所以,書的目錄就能夠稱之爲正排索引(目錄頁)。正則表達式
二、什麼時倒排索引呢?elasticsearch
仍是以一本書爲例,在有些書的最後,會有以詞爲單位的列表,指明瞭相應的詞分別出如今了哪些頁中,而這樣的列表就稱之爲倒排索引(索引頁)。性能
三、二者在搜索引擎中的對比學習
正排索引:文檔ID到文檔內容和單詞的關聯;搜索引擎
倒排索引:單詞到文檔ID的關聯;spa
以下表所示:插件
文檔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 |
上述兩表就是正排索引與倒排索引的簡單結構說明。命令行
四、倒排索引的組成
倒排索引由兩部分組成:
1)單詞詞典:它記錄了全部文檔的單詞,同時記錄了單詞到倒排列表的關聯關係。單詞詞典通常比較大,能夠經過B+樹或哈希拉鍊法實現,以知足高性能的插入與查詢。
2)倒排列表:它記錄單詞所對應的文檔組合體,主要是由倒排索引項組成的。
倒排索引項的內容包括:
a)文檔ID;
b)詞頻(Term Frequency),表明單詞在文檔中出現的次數,用於相關性打分;
c)位置(Position),表示單詞在文檔中分詞的位置,用於語句搜索;
d)偏移(Offset),記錄單詞開始和結束位置,用於實現高亮顯示;
2、分詞與分詞器
一、分詞:文本分析就是把全文轉換成一系列單詞(term/token)的過程,也叫作分詞。
二、分詞器:分詞是經過分詞器來實現的,它是專門處理分詞的組件。可使用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:自定義分詞器;
三、中文分詞
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核心技術與實戰》