內建的 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/mecabrc
loose
前綴是一個選項修飾詞。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_MECAB
CMake 選項編譯 MySQL。如果您已將mecab
和mecab-ipadic
安裝到預設位置,請將WITH_MECAB
選項設定為system
。-DWITH_MECAB=system
如果您定義了自訂安裝目錄,請將
WITH_MECAB
設定為自訂目錄。例如-DWITH_MECAB=/path/to/mecab