Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  MeCab Full-Text Parser Plugin

14.9.9 MeCab 全文解析器插件

内置的 MySQL 全文解析器使用空格来确定单词的开始和结束,限制了处理不使用空格分隔符的语言。为了解决这个问题,MySQL 提供了 MeCab 全文解析器插件。MeCab 全文解析器插件支持与 InnoDBMyISAM 一起使用。

Note

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

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

除了拆分文本成有意义单词之外,MeCab索引通常比ngram索引小,MeCab全文搜索也通常更快。一个缺点是,MeCab全文解析插件可能需要更长时间来拆分文档,相比于ngram全文解析插件。

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

关于MeCab解析器的更多信息,请参阅MeCab:Yet Another Part-of-Speech and Morphological Analyzer项目在Github上。

MeCab 解析器插件需要mecabmecab-ipadic

在支持的 Fedora、Debian 和 Ubuntu 平台(除了 Ubuntu 12.04,系统mecab 版本太旧),MySQL 如果安装到默认位置,将动态链接到系统mecab 安装。其他支持 Unix-like 平台上,libmecab.so 静态链接在 libpluginmecab.so 中,该文件位于 MySQL 插件目录中。mecab-ipadic 包含在 MySQL 二进制文件中,位于 Mysql_home\lib\mecab

您可以使用本地包管理工具(Fedora、Debian 和 Ubuntu)安装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配置选项设置为 MeCab 配置文件的位置,MeCab 配置文件是 mecabrc 文件。如果使用 MySQL 分发的 MeCab 包,mecabrc 文件位于 MYSQL_HOME/lib/mecab/etc/

    [mysqld]
    loose-mecab-rc-file=MYSQL_HOME/lib/mecab/etc/mecabrc

    loose 前缀是一个选项修饰符。直到安装 MeCab 解析器插件,mecab_rc_file 选项不被 MySQL 认识,但在尝试安装 MeCab 解析器插件前必须设置。loose 前缀允许您在遇到未知变量时重启 MySQL。

    如果使用自行安装的 MeCab 或从源代码编译 MeCab,mecabrc 配置文件的位置可能不同。

    关于 MySQL 配置文件和其位置的信息,请参见第 6.2.2.2 节,“使用选项文件”

  2. 在 MySQL 配置文件中,设置最小令牌大小为 1 或 2,这些值推荐用于与 MeCab 解析器一起使用。对于 InnoDB 表,minimum token size 由innodb_ft_min_token_size 配置选项定义,该选项的默认值为 3。对于 MyISAM 表,minimum token size 由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 条目可能不同,因为词典和它们的位置也不同。

    Note

    MeCab 解析器插件安装后,您可以使用mecab_charset 状态变量来查看 MeCab 使用的字符集。 MySQL 二进制提供的三个 MeCab 词典支持以下字符集。

    • ipadic_euc-jp 字典支持ujiseucjpms字符集。

    • ipadic_sjis 字典支持sjiscp932字符集。

    • ipadic_utf-8 字典支持utf8mb3utf8mb4字符集。

    mecab_charset 只报告第一个支持的字符集。例如,ipadic_utf-8 字典同时支持utf8mb3utf8mb4mecab_charset总是报告utf8,当使用该字典时。

  4. 重新启动 MySQL。

  5. 安装 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 索引,指定 WITH PARSER ngramCREATE TABLEALTER TABLECREATE INDEX

这个示例演示了创建一个带有 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 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 解析器将数据베이스管理 tokenize 为数据ベース管理

默认情况下,MeCab 解析器使用默认的停用词列表,该列表包含一些英文停用词。对于适用于日文的停用词列表,您需要自己创建。关于创建停用词列表的信息,请参阅第14.9.4节,“全文搜索停用词”

对于自然语言模式搜索,搜索术语将转换为 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);

通配符搜索术语不被 tokenize。对データベース管理*进行搜索,将在前缀データベース管理中搜索。

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

短语被 tokenize。例如,データベース管理 将被 tokenize 为 データベース 管理

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

mecabmecab-ipadic 可以使用二进制分布式包管理工具进行安装。例如,在 Fedora 上,您可以使用 Yum 进行安装:

$> yum mecab-devel

在 Debian 或 Ubuntu 上,您可以使用 APT 进行安装:

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

如果您想从源代码构建 mecabmecab-ipadic,基本的安装步骤如下。关于 MeCab 文档请参阅 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_MECABCMake选项编译MySQL。如果已经安装了 mecabmecab-ipadic,将WITH_MECAB选项设置为 system

    -DWITH_MECAB=system

    如果定义了自定义安装目录,设置WITH_MECAB到自定义目录。例如:

    -DWITH_MECAB=/path/to/mecab