elasticsearch教程--Analysis篇-分詞器
目錄
-
概述
-
環境準備
-
什麼是分詞
- 分詞目的
- 分詞器
-
彩蛋
概述
關於elasticsearch教程寫了關於安裝和安裝踩坑記兩篇博文, 現在就來寫點專案中使用中文分詞器的歷程。
本文旨在分局專案es中使用中文分詞器的心得,對es分詞器做初步講解,如有錯誤和不當之處,歡迎批評指正。
環境準備
- 全新最小化安裝的centos 7.5
- elasticsearch 6.4.0
什麼是分詞
分詞這個詞表明的意思已經很明瞭,就是將一句話分成多個詞語, 比如: “我愛祖國” 會被拆分為 【我,愛,祖國】。
那麼為什麼需要拆分成這樣呢? 這就要從全文檢索資料儲存結構說起,深入的儲存結構我就不深入講解了,因為我也不知道具體的[/奸笑]。正式開始,es內部基於apache lucene做了進一步的封裝,如果直接使用lucene做全文檢索,相信用過的前輩們頓感頭頂涼意,有了es封裝,小輩們至少可以省一瓶霸王洗髮水。
分詞的目的
es可以從千萬級別資料量快速檢索出對應的文件,要歸功於一個叫倒排索引的傢伙, 通過詞彙找到對應的文件,既然有倒排索引,那麼同樣出現了一個正向索引的東東,下面就來認識一下倒排索引
正向索引
先來說說正向索引,在搜尋引擎中,每個文件(每條資料)都會被分詞,得到每個詞出現的頻率以及位置,示例:
當搜尋 詞1 時,搜尋引擎就要將所有的文件遍歷獲取到在哪些文件中存在, 類似mysql做查詢, 通過文件去找詞,當資料量千萬級別以上並且多個詞進行搜尋,想想都好可怕啊!!!
倒排索引
倒排索引反向正向索引,通過詞去找文件,通過倒排索引檔案,建立詞與文件的關係。如下圖所示:
分詞器
官方解釋: 分詞是將文字(如任何電子郵件的正文或者一篇文章)轉換為標記或術語的過程,這些標記或術語被新增到倒排索引中便於搜尋。分析由分析器執行,它可以是內建的分析器,也可以是定義每個索引的自定義分析器。
言而總之,分詞器作用就是將文件(文章內容等)進行分詞,將詞語和文件的關係存入倒排索引便於搜尋,舉例:
elasticsearch內建的英文分詞器效果如下:
"The QUICK brown foxes jumped over the lazy dog!"
英文分詞器會將以上語句分成不同的詞彙。它將小寫每個詞彙,除去眾多的停用詞(the)和減少詞彙複意(foxes → fox, jumped → jump, lazy → lazi)。最後,在倒排索引中加入以下詞彙:
[ quick, brown, fox, jump, over, lazi, dog ]
elasticsearch內建分詞器有standard analyzer,simple analyzer,whitespace analyzer,stop analyzer,Keyword analyzer,pattern analyzer,language analyzers,fingerprint analyzer這8種
注意: 這些內建的分詞器對中文支援效果都很差
standard analyzer
預設分詞器,它提供了基於語法的分詞(基於Unicode文字分割演算法,如Unicode® Standard Annex #29所指定的),適用於大多數語言,對中文分詞效果很差。
分詞示例:
分詞效果如下:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]
simple analyzer
它提供了基於字母的分詞,如果遇到不是字母時直接分詞,所有字母均置為小寫
分詞示例:
分詞效果如下:
[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
whitespace analyzer
它提供了基於空格的分詞,如果遇到空格時直接分詞
分詞示例:
分詞效果如下:
[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]
stop analyzer
它與simple analyzer相同,但是支援刪除停用詞。它預設使用_english_stop單詞。
分詞示例:
分詞效果如下:
[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]
keyword analyzer
它提供的是無操作分詞,它將整個輸入字串作為一個詞返回,即不分詞。
分詞示例:
分詞效果如下:
[ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]
pattern analyzer
它提供了基於正則表示式將文字分詞。正則表示式應該匹配詞語分隔符,而不是詞語本身。正則表示式預設為\W+(或所有非單詞字元)。
分詞示例:
分詞效果如下:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
language analyzers
它提供了一組語言的分詞,旨在處理特定語言.它包含了一下語言的分詞:
阿拉伯語,亞美尼亞語,巴斯克語,巴西語,保加利亞語,加泰羅尼亞語,cjk,捷克語,丹麥語,荷蘭語,英語,芬蘭語,法語,加利西亞語,德語,希臘語,印度語,匈牙利語,愛爾蘭語,義大利語,拉脫維亞語,立陶宛語,挪威語,波斯語,葡萄牙語,羅馬尼亞語,俄羅斯語,索拉尼語,西班牙語,瑞典語,土耳其語,泰國語。
fingerprint analyzer
它提供了了一種fingerprinting演算法,該演算法被OpenRefine專案用於幫助叢集。
輸入文字是模式化語言,經過規範的刪除擴充套件字元、排序、刪除索引到分詞中。如果配置了停用詞列表,也將刪除停用詞。
分詞示例:
分詞效果如下:
[ and consistent godel is said sentence this yes ]
彩蛋
下一篇將寫關於es外掛安裝以及中文分詞器使用的相關教程以及踩坑記,歡迎關注和收藏