文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  MeCab 全文解析器插件

14.9.9 MeCab 全文解析器插件

内置的 MySQL 全文解析器使用单词之间的空格作为分隔符来确定单词的起始和结束位置,这在处理不使用单词分隔符的表意文字语言时是一个限制。为了解决日语的这个限制,MySQL 提供了一个 MeCab 全文解析器插件。MeCab 全文解析器插件支持与 InnoDBMyISAM 一起使用。

注意

MySQL 还提供了一个支持日语的 ngram 全文解析器插件。有关更多信息,请参见 第 14.9.8 节,“ngram 全文解析器”.

MeCab 全文解析器插件是一个用于日语的全文解析器插件,它将一段文本序列分解成有意义的单词。例如,MeCab 将 データベース管理 (Database Management) 分解成 データベース (Database) 和 管理 (Management)。相比之下,ngram 全文解析器将文本分解成连续的 n 个字符序列,其中 n 代表 1 到 10 之间的数字。

除了将文本分解成有意义的单词外,MeCab 索引通常比 ngram 索引更小,并且 MeCab 全文搜索通常更快。一个缺点是,与 ngram 全文解析器相比,MeCab 全文解析器可能需要更长的时间来分解文档。

第 14.9 节,“全文搜索函数” 中描述的全文搜索语法适用于 MeCab 解析器插件。解析行为的差异将在本节中介绍。与全文相关的配置选项也适用。

有关 MeCab 解析器的更多信息,请参阅 Github 上的 MeCab: 另一种词性标注和形态分析器 项目。

安装 MeCab 解析器插件

MeCab 解析器插件需要 mecabmecab-ipadic

在支持的 Fedora、Debian 和 Ubuntu 平台上(除了系统 mecab 版本过旧的 Ubuntu 12.04),如果 MySQL 安装在默认位置,则 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 解析器插件之前,MySQL 无法识别 mecab_rc_file 选项,但必须在尝试安装 MeCaB 解析器插件之前设置它。 loose 前缀允许您重新启动 MySQL 而不因无法识别的变量而出现错误。

    如果您使用的是自己的 MeCab 安装,或者从源代码构建 MeCab,则 mecabrc 配置文件的位置可能不同。

    有关 MySQL 配置文件及其位置的信息,请参见 第 6.2.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
  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 索引的表,插入示例数据,以及查看信息架构 INNODB_FT_INDEX_CACHE 表中的标记化数据

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 解析器将 データベース管理 标记化为 データベース管理

MeCab 解析器停用词处理

默认情况下,MeCab 解析器使用默认停用词列表,该列表包含简短的英文停用词列表。对于适用于日语的停用词列表,您必须创建自己的列表。有关创建停用词列表的信息,请参阅 第 14.9.4 节,“全文停用词”

MeCab 解析器词语搜索

对于自然语言模式搜索,搜索词将转换为标记的并集。例如,データベース管理 将转换为 データベース 管理

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 解析器通配符搜索

通配符搜索词不会被标记化。对 データベース管理* 的搜索将在前缀 データベース管理 上执行。

SELECT COUNT(*) FROM articles 
    WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);

MeCab 解析器短语搜索

短语会被标记化。例如,データベース管理 被标记化为 データベース 管理

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