1. 程式人生 > >elasticsearch教程--Analysis篇-分詞器

elasticsearch教程--Analysis篇-分詞器

目錄

  • 概述

  • 環境準備

  • 什麼是分詞

  • 分詞目的
  • 分詞器
  • 彩蛋

概述

    關於elasticsearch教程寫了關於安裝安裝踩坑記兩篇博文, 現在就來寫點專案中使用中文分詞器的歷程。

本文旨在分局專案es中使用中文分詞器的心得,對es分詞器做初步講解,如有錯誤和不當之處,歡迎批評指正。

環境準備

  1. 全新最小化安裝的centos 7.5
  2. 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外掛安裝以及中文分詞器使用的相關教程以及踩坑記,歡迎關注和收藏