文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  MeCab 全文解析器外掛程式

14.9.9 MeCab 全文解析器外掛程式

內建的 MySQL 全文解析器使用單字之間的空格作為分隔符號,以判斷單字的開頭與結尾,這是在處理不使用單字分隔符號的表意語言時的限制。為了處理日文的這個限制,MySQL 提供了 MeCab 全文解析器外掛程式。MeCab 全文解析器外掛程式支援與 InnoDBMyISAM 一起使用。

注意

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 解析器外掛程式需要 mecabmecab-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 上) 安裝 mecabmecab-ipadic,也可以從來源建置 mecabmecab-ipadic。如需有關使用原生套件管理公用程式安裝 mecabmecab-ipadic 的資訊,請參閱從二進位發行版本安裝 MeCab (選用)。如果您想要從來源建置 mecabmecab-ipadic,請參閱從來源建置 MeCab (選用)

在 Windows 上,libmecab.dll 位於 MySQL bin 目錄中。mecab-ipadic 位於 MYSQL_HOME/lib/mecab 中。

若要安裝和設定 MeCab 解析器外掛程式,請執行下列步驟

  1. 在 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 節「使用選項檔」

  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
  3. 修改 mecabrc 設定檔以指定您要使用的字典。與 MySQL 二進位檔一起發行的 mecab-ipadic 套件包含三個字典 (ipadic_euc-jpipadic_sjisipadic_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 字典支援 ujiseucjpms 字元集。

    • ipadic_sjis 字典支援 sjiscp932 字元集。

    • ipadic_utf-8 字典支援 utf8mb3utf8mb4 字元集。

    mecab_charset 只會報告第一個支援的字元集。例如,ipadic_utf-8 字典同時支援 utf8mb3utf8mb4。當使用此字典時,mecab_charset 一律會報告 utf8

  4. 重新啟動 MySQL。

  5. 安裝 MeCab 解析器外掛程式

    MeCab 解析器外掛程式使用 INSTALL PLUGIN 安裝。外掛程式名稱是 mecab,而共用程式庫名稱是 libpluginmecab.so。如需有關安裝外掛程式的其他資訊,請參閱第 7.6.1 節「安裝和解除安裝外掛程式」

    INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';

    安裝完成後,MeCab 解析器外掛程式會在每次正常 MySQL 重新啟動時載入。

  6. 使用 SHOW PLUGINS 陳述式確認 MeCab 解析器外掛程式已載入。

    mysql> SHOW PLUGINS;

    mecab 外掛程式應會出現在外掛程式清單中。

建立使用 MeCab 解析器的 FULLTEXT 索引

若要建立使用 mecab 解析器的 FULLTEXT 索引,請使用 CREATE TABLEALTER TABLECREATE 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 TABLECREATE 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 (選用)

本節說明如何使用原生套件管理公用程式,從二進位發行版本安裝 mecabmecab-ipadic。例如,在 Fedora 上,您可以使用 Yum 執行安裝

$> yum mecab-devel

在 Debian 或 Ubuntu 上,您可以執行 APT 安裝

$> apt-get install mecab
$> apt-get install mecab-ipadic

從原始碼安裝 MeCab (選用)

如果您想要從原始碼建置 mecabmecab-ipadic,以下提供基本安裝步驟。如需其他資訊,請參閱 MeCab 文件。

  1. http://taku910.github.io/mecab/#download 下載 mecabmecab-ipadic 的 tar.gz 套件。截至 2016 年 2 月,最新的可用套件為 mecab-0.996.tar.gzmecab-ipadic-2.7.0-20070801.tar.gz

  2. 安裝 mecab

    $> tar zxfv mecab-0.996.tar
    $> cd mecab-0.996
    $> ./configure
    $> make
    $> make check
    $> su
    $> make install
  3. 安裝 mecab-ipadic

    $> tar zxfv mecab-ipadic-2.7.0-20070801.tar
    $> cd mecab-ipadic-2.7.0-20070801
    $> ./configure
    $> make
    $> su
    $> make install
  4. 使用 WITH_MECAB CMake 選項編譯 MySQL。如果您已將 mecabmecab-ipadic 安裝到預設位置,請將 WITH_MECAB 選項設定為 system

    -DWITH_MECAB=system

    如果您定義了自訂安裝目錄,請將 WITH_MECAB 設定為自訂目錄。例如

    -DWITH_MECAB=/path/to/mecab