內建的 MySQL 全文解析器使用單字之間的空格作為分隔符號,以判斷單字的開頭與結尾,這是在處理不使用單字分隔符號的表意語言時的限制。為了處理日文的這個限制,MySQL 提供了 MeCab 全文解析器外掛程式。MeCab 全文解析器外掛程式支援與 InnoDB 和 MyISAM 一起使用。
MySQL 也提供了一個支援日文的 ngram 全文解析器外掛程式。如需更多資訊,請參閱第 14.9.8 節,「ngram 全文解析器」。
MeCab 全文解析器外掛程式是一個用於日文的全文解析器外掛程式,可將文字序列符號化為有意義的單字。例如,MeCab 將「データベース管理」(「資料庫管理」) 符號化為「データベース」(「資料庫」) 和「管理」(「管理」)。相比之下,ngram 全文解析器會將文字符號化為n 個字元的連續序列,其中 n 代表 1 到 10 之間的數字。
除了將文字符號化為有意義的單字之外,MeCab 索引通常比 ngram 索引小,而且 MeCab 全文搜尋通常更快。一個缺點是,與 ngram 全文解析器相比,MeCab 全文解析器符號化文件可能需要更長的時間。
第 14.9 節,「全文搜尋函數」中描述的全文搜尋語法適用於 MeCab 解析器外掛程式。此節將說明解析行為的差異。全文相關的組態選項也適用。
如需有關 MeCab 解析器的其他資訊,請參考 Github 上的 MeCab:另一個詞性與形態分析器專案。
安裝 MeCab 解析器外掛程式
MeCab 解析器外掛程式需要 mecab 和 mecab-ipadic。
在支援的 Fedora、Debian 和 Ubuntu 平台上(Ubuntu 12.04 除外,其中系統 mecab 版本太舊),如果安裝在預設位置,MySQL 會動態連結到系統 mecab 安裝。在其他支援的類 Unix 平台上,libmecab.so 會靜態連結至 libpluginmecab.so,其位於 MySQL 外掛程式目錄中。mecab-ipadic 包含在 MySQL 二進位檔案中,並位於 中。MYSQL_HOME\lib\mecab
您可以使用原生套件管理公用程式 (在 Fedora、Debian 和 Ubuntu 上) 安裝 mecab 和 mecab-ipadic,也可以從來源建置 mecab 和 mecab-ipadic。如需有關使用原生套件管理公用程式安裝 mecab 和 mecab-ipadic 的資訊,請參閱從二進位發行版本安裝 MeCab (選用)。如果您想要從來源建置 mecab 和 mecab-ipadic,請參閱從來源建置 MeCab (選用)。
在 Windows 上,libmecab.dll 位於 MySQL bin 目錄中。mecab-ipadic 位於 中。MYSQL_HOME/lib/mecab
若要安裝和設定 MeCab 解析器外掛程式,請執行下列步驟
在 MySQL 組態檔中,將
mecab_rc_file組態選項設定為mecabrc組態檔的位置,這是 MeCab 的組態檔。如果您使用的是隨附於 MySQL 發行的 MeCab 套件,mecabrc檔案會位於MYSQL_HOME/lib/mecab/etc/中。[mysqld] loose-mecab-rc-file=MYSQL_HOME/lib/mecab/etc/mecabrcloose前綴是一個選項修飾詞。mecab_rc_file選項在 MeCaB 解析器外掛程式安裝之前,MySQL 無法識別,但必須在嘗試安裝 MeCaB 解析器外掛程式之前設定。loose前綴允許您重新啟動 MySQL,而不會因為無法識別的變數而發生錯誤。如果您使用自己的 MeCab 安裝,或從原始碼建置 MeCab,
mecabrc設定檔的位置可能會有所不同。有關 MySQL 設定檔及其位置的資訊,請參閱第 6.2.2.2 節「使用選項檔」。
同樣在 MySQL 設定檔中,將最小 Token 大小設定為 1 或 2,這些是建議與 MeCab 解析器搭配使用的值。對於
InnoDB表格,最小 Token 大小由innodb_ft_min_token_size設定選項定義,其預設值為 3。對於MyISAM表格,最小 Token 大小由ft_min_word_len定義,其預設值為 4。[mysqld] innodb_ft_min_token_size=1修改
mecabrc設定檔以指定您要使用的字典。與 MySQL 二進位檔一起發行的mecab-ipadic套件包含三個字典 (ipadic_euc-jp、ipadic_sjis和ipadic_utf-8)。與 MySQL 一起封裝的mecabrc設定檔包含類似以下的項目dicdir = /path/to/mysql/lib/mecab/lib/mecab/dic/ipadic_euc-jp例如,若要使用
ipadic_utf-8字典,請如下修改項目dicdir=MYSQL_HOME/lib/mecab/dic/ipadic_utf-8如果您使用自己的 MeCab 安裝,或已從原始碼建置 MeCab,
mecabrc檔案中的預設dicdir項目可能會有所不同,字典及其位置也是如此。注意安裝 MeCab 解析器外掛程式後,您可以使用
mecab_charset狀態變數來檢視與 MeCab 一起使用的字元集。MySQL 二進位檔提供的三個 MeCab 字典支援下列字元集。ipadic_euc-jp字典支援ujis和eucjpms字元集。ipadic_sjis字典支援sjis和cp932字元集。ipadic_utf-8字典支援utf8mb3和utf8mb4字元集。
mecab_charset只會報告第一個支援的字元集。例如,ipadic_utf-8字典同時支援utf8mb3和utf8mb4。當使用此字典時,mecab_charset一律會報告utf8。重新啟動 MySQL。
安裝 MeCab 解析器外掛程式
MeCab 解析器外掛程式使用
INSTALL PLUGIN安裝。外掛程式名稱是mecab,而共用程式庫名稱是libpluginmecab.so。如需有關安裝外掛程式的其他資訊,請參閱第 7.6.1 節「安裝和解除安裝外掛程式」。INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';安裝完成後,MeCab 解析器外掛程式會在每次正常 MySQL 重新啟動時載入。
使用
SHOW PLUGINS陳述式確認 MeCab 解析器外掛程式已載入。mysql> SHOW PLUGINS;mecab外掛程式應會出現在外掛程式清單中。
建立使用 MeCab 解析器的 FULLTEXT 索引
若要建立使用 mecab 解析器的 FULLTEXT 索引,請使用 CREATE TABLE、ALTER TABLE 或 CREATE INDEX 指定 WITH PARSER ngram。
此範例示範建立具有 mecab FULLTEXT 索引的表格、插入範例資料,以及在 Information Schema INNODB_FT_INDEX_CACHE 表格中檢視 Token 化資料
mysql> USE test;
mysql> CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body) WITH PARSER mecab
) ENGINE=InnoDB CHARACTER SET utf8mb4;
mysql> SET NAMES utf8mb4;
mysql> INSERT INTO articles (title,body) VALUES
('データベース管理','このチュートリアルでは、私はどのようにデータベースを管理する方法を紹介します'),
('データベースアプリケーション開発','データベースアプリケーションを開発することを学ぶ');
mysql> SET GLOBAL innodb_ft_aux_table="test/articles";
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY doc_id, position;若要將 FULLTEXT 索引新增至現有的表格,您可以使用 ALTER TABLE 或 CREATE INDEX。例如
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT
) ENGINE=InnoDB CHARACTER SET utf8mb4;
ALTER TABLE articles ADD FULLTEXT INDEX ft_index (title,body) WITH PARSER mecab;
# Or:
CREATE FULLTEXT INDEX ft_index ON articles (title,body) WITH PARSER mecab;
MeCab 解析器空格處理
MeCab 解析器使用空格作為查詢字串中的分隔符號。例如,MeCab 解析器將 データベース管理 Token 化為 データベース 和 管理。
MeCab 解析器停用字處理
依預設,MeCab 解析器使用預設停用字清單,其中包含簡短的英文停用字清單。對於適用於日文的停用字清單,您必須建立自己的清單。如需有關建立停用字清單的資訊,請參閱第 14.9.4 節「全文停用字」。
MeCab 解析器字詞搜尋
對於自然語言模式搜尋,搜尋字詞會轉換為 Token 的聯集。例如,データベース管理 會轉換為 データベース 管理。
SELECT COUNT(*) FROM articles
WHERE MATCH(title,body) AGAINST('データベース管理' IN NATURAL LANGUAGE MODE);對於布林模式搜尋,搜尋字詞會轉換為搜尋詞組。例如,データベース管理 會轉換為 データベース 管理。
SELECT COUNT(*) FROM articles
WHERE MATCH(title,body) AGAINST('データベース管理' IN BOOLEAN MODE);
MeCab 解析器萬用字元搜尋
萬用字元搜尋字詞不會被 Token 化。在 データベース管理* 上執行的搜尋是在前置詞 データベース管理 上執行。
SELECT COUNT(*) FROM articles
WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);
MeCab 解析器詞組搜尋
詞組會被 Token 化。例如,データベース管理 會被 Token 化為 データベース 管理。
SELECT COUNT(*) FROM articles
WHERE MATCH(title,body) AGAINST('"データベース管理"' IN BOOLEAN MODE);
從二進位發行版本安裝 MeCab (選用)
本節說明如何使用原生套件管理公用程式,從二進位發行版本安裝 mecab 和 mecab-ipadic。例如,在 Fedora 上,您可以使用 Yum 執行安裝
$> yum mecab-devel在 Debian 或 Ubuntu 上,您可以執行 APT 安裝
$> apt-get install mecab
$> apt-get install mecab-ipadic
從原始碼安裝 MeCab (選用)
如果您想要從原始碼建置 mecab 和 mecab-ipadic,以下提供基本安裝步驟。如需其他資訊,請參閱 MeCab 文件。
從 http://taku910.github.io/mecab/#download 下載
mecab和mecab-ipadic的 tar.gz 套件。截至 2016 年 2 月,最新的可用套件為mecab-0.996.tar.gz和mecab-ipadic-2.7.0-20070801.tar.gz。安裝
mecab$> tar zxfv mecab-0.996.tar $> cd mecab-0.996 $> ./configure $> make $> make check $> su $> make install安裝
mecab-ipadic$> tar zxfv mecab-ipadic-2.7.0-20070801.tar $> cd mecab-ipadic-2.7.0-20070801 $> ./configure $> make $> su $> make install使用
WITH_MECABCMake 選項編譯 MySQL。如果您已將mecab和mecab-ipadic安裝到預設位置,請將WITH_MECAB選項設定為system。-DWITH_MECAB=system如果您定義了自訂安裝目錄,請將
WITH_MECAB設定為自訂目錄。例如-DWITH_MECAB=/path/to/mecab