MySQL 全文檢索索引 ngram外掛程式

來源:互聯網
上載者:User

標籤:就是   www   檢查   將不   https   com   選擇   處理   ports   

MySql5.7 建立全文索引

 

 

InnoDB預設的全文索引parser非常合適於Latin,因為Latin是通過空格來分詞的。但對於像中文,日文和韓文來說,沒有這樣的分隔字元。一個詞可以由多個字來組成,所以我們需要用不同的方式來處理。在MySQL 5.7.6中我們能使用一個新的全文索引外掛程式來處理它們:n-gram parser.

 

什麼是N-gram?

在全文索引中,n-gram就是一段文字裡面連續的n個字的序列。例如,用n-gram來對”資訊系統”來進行分詞,得到的結果如下:

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

N-gram parser是預設載入到MySQL中並可以直接使用的。我們只需要在DDL中建立全文索引時使用WITH PARSER ngram。

我們引入了一個新的全域變數叫ngram_token_size。由它來決定n-gram中n的大小,也就是詞的大小。它的預設值是2,這個時候,我們使用的是bigram。它的合法的取值範圍是1到10。現在,我們很自然會想到一個問題:實際應用中應該如何設定ngram_token_size值的大小呢?當然,我們推薦使用2。但是你也可以通過如下這個簡單的規則來可以選擇任何合法的值:設定到你希望能查詢到的最小的詞的大小。如果你想查詢到單個字,那麼我們需要設定為1。 ngram_token_size的值設定的越小,全文索引佔用的空間也越小。一般來說,查詢正好等於ngram_token_size的詞,速度會更快,但是查詢比它更長的詞或短語,則會變慢。

N-gram分詞處理

N-gram parser和系統預設的全文索引parser有如下不同點:

  1. 詞大小檢查:因為有了ngram_token_size,所以innodb_ft_min_token_size和innodb_ft_max_token_size將不適用於n-gram。
  2. 無用詞(stopword)處理:通常,對於一個新的詞,我們會尋找stopwords表,看是否有匹配的詞。如果有,這個詞就不會加入到全文索引中。但是在n-gram中,我們會尋找stopwords表,看是否包含裡面的詞。這樣處理的原因是,在中日韓的文本中,有很多沒有意義的字元,詞語和標點符號。比如,如果我們把‘的’加入到stopwords表中,那麼對於句子‘資訊的系統’,在預設情況下我們分詞結果為‘資訊’,‘系統’。其中‘息的’和‘的系’被過濾掉了。

我們可以通過查詢INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE和INFORMATION_SCHEMA.INNODB_FT_TABLE_TABLE來查詢哪些詞在全文索引裡面。這是一個非常有用的調試工具。如果我們發現一個包含某個詞的文檔,沒有如我們所期望的那樣出現在查詢結果中,那麼這個詞可能是因為某些原因不在全文索引裡面。比如,它含有stopword,或者它的大小小於ngram_token_size等等。這個時候我們就可以通過查詢這兩個表來確認。

MySQL 全文檢索索引 ngram外掛程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.