MySQL 全文檢索 ngram插件

InnoDB全文索引:N-gram Parser【轉】

MySql5.7 創建全文索引

 

 

InnoDB默認的全文索引parser很是合適於Latin,由於Latin是經過空格來分詞的。但對於像中文,日文和韓文來講,沒有這樣的分隔符。一個詞能夠由多個字來組成,因此咱們須要用不一樣的方式來處理。在MySQL 5.7.6中咱們能使用一個新的全文索引插件來處理它們:n-gram parser.html

 

什麼是N-gram?mysql

在全文索引中,n-gram就是一段文字裏面連續的n個字的序列。例如,用n-gram來對」信息系統」來進行分詞,獲得的結果以下:sql

如何在InnoDB中使用N-gram Parser?工具

N-gram parser是默認加載到MySQL中並能夠直接使用的。咱們只須要在DDL中建立全文索引時使用WITH PARSER ngram。sqlserver

咱們引入了一個新的全局變量叫ngram_token_size。由它來決定n-gram中n的大小,也就是詞的大小。它的默認值是2,這個時候,咱們使用的是bigram。它的合法的取值範圍是1到10。如今,咱們很天然會想到一個問題:實際應用中應該如何設置ngram_token_size值的大小呢?固然,咱們推薦使用2。可是你也能夠經過以下這個簡單的規則來能夠選擇任何合法的值:設置到你但願能查詢到的最小的詞的大小。若是你想查詢到單個字,那麼咱們須要設置爲1。 ngram_token_size的值設置的越小,全文索引佔用的空間也越小。通常來講,查詢正好等於ngram_token_size的詞,速度會更快,可是查詢比它更長的詞或短語,則會變慢。post

N-gram分詞處理url

N-gram parser和系統默認的全文索引parser有以下不一樣點:插件

  1. 詞大小檢查:由於有了ngram_token_size,因此innodb_ft_min_token_sizeinnodb_ft_max_token_size將不適用於n-gram。
  2. 無用詞(stopword)處理:一般,對於一個新的詞,咱們會查找stopwords表,看是否有匹配的詞。若是有,這個詞就不會加入到全文索引中。可是在n-gram中,咱們會查找stopwords表,看是否包含裏面的詞。這樣處理的緣由是,在中日韓的文本中,有不少沒有意義的字符,詞語和標點符號。好比,若是咱們把‘的’加入到stopwords表中,那麼對於句子‘信息的系統’,在默認狀況下咱們分詞結果爲‘信息’,‘系統’。其中‘息的’和‘的系’被過濾掉了。

咱們能夠經過查詢INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHEINFORMATION_SCHEMA.INNODB_FT_TABLE_TABLE來查詢哪些詞在全文索引裏面。這是一個很是有用的調試工具。若是咱們發現一個包含某個詞的文檔,沒有如咱們所指望的那樣出如今查詢結果中,那麼這個詞多是由於某些緣由不在全文索引裏面。好比,它含有stopword,或者它的大小小於ngram_token_size等等。這個時候咱們就能夠經過查詢這兩個表來確認。調試

相關文章
相關標籤/搜索