內建的 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 安裝在預設位置,則 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 設定檔中,將最小詞語長度設定為 1 或 2,這些是建議與 MeCab 解析器一起使用的值。對於
InnoDB
表格,最小詞語長度由innodb_ft_min_token_size
設定選項定義,其預設值為 3。對於MyISAM
表格,最小詞語長度由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 解析器外掛程式
使用
INSTALL PLUGIN
安裝 MeCab 解析器外掛程式。外掛程式名稱為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
索引的表格、插入範例資料,以及檢視資訊綱要 INNODB_FT_INDEX_CACHE
表格中的 Tokenized 資料
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 解析器將 データベース管理 Tokenized 為 データベース 和 管理。
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 解析器的萬用字元搜尋
萬用字元搜尋詞語不會被 Tokenized。對 データベース管理* 的搜尋會對前綴 データベース管理 執行。
SELECT COUNT(*) FROM articles
WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);
MeCab 解析器的片語搜尋
片語會被 Tokenized。例如,データベース管理 會被 Tokenized 為 データベース 管理。
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