12.9.9 MeCab 全文分析器插件

内置的 MySQL 全文语法分析器使用单词之间的空白作为定界符来确定单词的开始和结尾,这在使用不使用单词定界符的 table 意语言时是一个限制。为了解决日语的这一限制,MySQL 提供了 MeCab 全文分析器插件。支持与InnoDBMyISAM一起使用的 MeCab 全文分析器插件。

Note

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

MeCab 全文分析器插件是日语的全文分析器插件,可将一系列文本标记化为有意义的单词。例如,MeCab 将“データベースManagement”(“数据库 Management”)标记化为“データベース”(“数据库”)和“Management”(“Management”)。相比之下,ngram全文分析器将文本标记为* n 字符的连续序列,其中 n *table 示 1 到 10 之间的数字。

除了将文本标记为有意义的单词外,MeCab 索引通常比 ngram 索引小,并且 MeCab 全文搜索通常更快。一个缺点是,与 ngram 全文语法分析器相比,MeCab 全文语法分析器对文档进行标记化可能需要更长的时间。

第 12.9 节“全文搜索功能”中描述的全文本搜索语法适用于 MeCab 解析器插件。本节介绍了解析行为的差异。全文相关的配置选项也适用。

有关 MeCab 解析器的其他信息,请参阅 Github 上的MeCab:语音和形态分析器的又一部分项目。

安装 MeCab Parser 插件

MeCab 解析器插件需要mecabmecab-ipadic

在受支持的 Fedora,Debian 和 Ubuntu 平台上(系统mecab版本太旧的 Ubuntu 12.04 除外),如果 MySQL mecab安装已安装到默认位置,则它会动态链接到系统mecab安装。在其他受支持的类似 Unix 的平台上,libmecab.solibpluginmecab.so中静态链接,该位置位于 MySQL 插件目录中。 mecab-ipadic包含在 MySQL 二进制文件中,位于MYSQL_HOME\lib\mecab中。

您可以使用本机软件包 ManagementUtil(在 Fedora,Debian 和 Ubuntu 上)安装mecabmecab-ipadic,也可以从源代码构建mecabmecab-ipadic。有关使用本机软件包 ManagementUtil 安装mecabmecab-ipadic的信息,请参见从二进制发行版安装 MeCab(可选)。如果要从源代码构建mecabmecab-ipadic,请参见从源代码构建 MeCab(可选)

在 Windows 上,在 MySQL bin目录中找到libmecab.dllmecab-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前缀是option modifier。在安装了 MeCaB 解析器插件之前,MySQL 无法识别mecab_rc_file选项,但是必须在尝试安装 MeCaB 解析器插件之前将其设置。 loose前缀使您可以重新启动 MySQL,而不会由于无法识别的变量而导致错误。

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

有关 MySQL 配置文件及其位置的信息,请参见第 4.2.2.2 节“使用选项文件”

  • 同样在 MySQL 配置文件中,将最小令牌大小设置为 1 或 2,这是建议与 MeCab 解析器一起使用的值。对于InnoDBtable,最小令牌大小由innodb_ft_min_token_size配置选项定义,其默认值为 3.对于MyISAMtable,最小令牌大小由ft_min_word_len定义,默认值为 4.
[mysqld]
innodb_ft_min_token_size=1
  • 修改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 status 变量查看与 MeCab 一起使用的字符集。 MySQL 二进制文件随附的三个 MeCab 词典支持以下字符集。

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

  • ipadic_sjis字典支持sjiscp932字符集。

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

mecab_charset仅报告支持的第一个字符集。例如,ipadic_utf-8字典同时支持utf8utf8mb4。使用此词典时,mecab_charset始终报告utf8

  • Restart MySQL.

  • 安装 MeCab 解析器插件:

MeCab 解析器插件是使用INSTALL PLUGIN语法安装的。插件名称为mecab,共享库名称为libpluginmecab.so。有关安装插件的其他信息,请参见第 5.5.1 节“安装和卸载插件”

INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';

安装后,MeCab 解析器插件会在每次正常的 MySQL 重新启动时加载。

  • 使用SHOW PLUGINS语句验证是否已加载 MeCab 解析器插件。
mysql> SHOW PLUGINS;

mecab插件应显示在插件列 table 中。

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

要创建使用 mecab 解析器的FULLTEXT索引,请使用CREATE TABLEALTER TABLECREATE INDEX指定WITH PARSER ngram

本示例演示了使用mecab FULLTEXT索引创建 table,插入示例数据以及在INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHEtable 中查看标记化数据:

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 utf8;

mysql> SET NAMES utf8;

mysql> INSERT INTO articles (title,body) VALUES
    ('データベースManagement','このチュートリアルでは、私はどのようにデータベースをManagementする方法を紹介します'),
    ('データベースアプリケーション開発','データベースアプリケーションを開発することを学ぶ');

mysql> SET GLOBAL innodb_ft_aux_table="test/articles";

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY doc_id, position;

要将FULLTEXT索引添加到现有 table 中,可以使用ALTER TABLECREATE INDEX。例如:

CREATE TABLE articles (
      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
      title VARCHAR(200),
      body TEXT
     ) ENGINE=InnoDB CHARACTER SET utf8;

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 解析器将データベースManagement 标记为データベース和 Management。

MeCab 解析器停用词处理

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

MeCab 分析器术语搜索

对于自然语言模式搜索,搜索项将转换为令牌的并集。例如,データベースManagement 被转换为データベースManagement。

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

对于布尔模式搜索,搜索项将转换为搜索短语。例如,データベースManagement 被转换为データベースManagement。

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

MeCab Parser 通配符搜索

通配符搜索词未标记。对データベースManagement*的搜索是对前缀データベースManagement 进行的。

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

MeCab 分析器短语搜索

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

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

从二进制分发版安装 MeCab(可选)

本节介绍如何使用本机软件包 ManagementUtil 从二进制发行版安装mecabmecab-ipadic。例如,在 Fedora 上,您可以使用 Yum 执行安装:

yum mecab-devel

在 Debian 或 Ubuntu 上,您可以执行 APT 安装:

apt-get install mecab
apt-get install mecab-ipadic

从源安装 MeCab(可选)

如果要从源代码构建mecabmecab-ipadic,则下面提供了基本的安装步骤。有关其他信息,请参阅 MeCab 文档。

  • http://taku910.github.io/mecab/#download下载mecabmecab-ipadic的 tar.gz 软件包。截至 2016 年 2 月,最新可用软件包是mecab-0.996.tar.gzmecab-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。如果已将mecabmecab-ipadic安装到默认位置,请将WITH_MECAB选项设置为system
-DWITH_MECAB=system

如果定义了定制安装目录,请将WITH_MECAB设置为定制目录。例如:

-DWITH_MECAB=/path/to/mecab