12.9.9 MeCab 全文分析器插件
内置的 MySQL 全文语法分析器使用单词之间的空白作为定界符来确定单词的开始和结尾,这在使用不使用单词定界符的 table 意语言时是一个限制。为了解决日语的这一限制,MySQL 提供了 MeCab 全文分析器插件。支持与InnoDB和MyISAM一起使用的 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 解析器插件需要mecab
和mecab-ipadic
。
在受支持的 Fedora,Debian 和 Ubuntu 平台上(系统mecab
版本太旧的 Ubuntu 12.04 除外),如果 MySQL mecab
安装已安装到默认位置,则它会动态链接到系统mecab
安装。在其他受支持的类似 Unix 的平台上,libmecab.so
在libpluginmecab.so
中静态链接,该位置位于 MySQL 插件目录中。 mecab-ipadic
包含在 MySQL 二进制文件中,位于MYSQL_HOME\lib\mecab
中。
您可以使用本机软件包 ManagementUtil(在 Fedora,Debian 和 Ubuntu 上)安装mecab
和mecab-ipadic
,也可以从源代码构建mecab
和mecab-ipadic
。有关使用本机软件包 ManagementUtil 安装mecab
和mecab-ipadic
的信息,请参见从二进制发行版安装 MeCab(可选)。如果要从源代码构建mecab
和mecab-ipadic
,请参见从源代码构建 MeCab(可选)。
在 Windows 上,在 MySQL bin
目录中找到libmecab.dll
。 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
前缀是option modifier。在安装了 MeCaB 解析器插件之前,MySQL 无法识别mecab_rc_file选项,但是必须在尝试安装 MeCaB 解析器插件之前将其设置。 loose
前缀使您可以重新启动 MySQL,而不会由于无法识别的变量而导致错误。
如果您使用自己的 MeCab 安装或从源代码构建 MeCab,则mecabrc
配置文件的位置可能有所不同。
有关 MySQL 配置文件及其位置的信息,请参见第 4.2.2.2 节“使用选项文件”。
- 同样在 MySQL 配置文件中,将最小令牌大小设置为 1 或 2,这是建议与 MeCab 解析器一起使用的值。对于
InnoDB
table,最小令牌大小由innodb_ft_min_token_size配置选项定义,其默认值为 3.对于MyISAM
table,最小令牌大小由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
条目将有所不同,字典及其位置也将有所不同。
Note
安装 MeCab 解析器插件后,您可以使用mecab_charset status 变量查看与 MeCab 一起使用的字符集。 MySQL 二进制文件随附的三个 MeCab 词典支持以下字符集。
-
ipadic_euc-jp
字典支持ujis
和eucjpms
字符集。 -
ipadic_sjis
字典支持sjis
和cp932
字符集。 -
ipadic_utf-8
字典支持utf8
和utf8mb4
字符集。
mecab_charset仅报告支持的第一个字符集。例如,ipadic_utf-8
字典同时支持utf8
和utf8mb4
。使用此词典时,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 TABLE,ALTER TABLE或CREATE 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 TABLE或CREATE 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 从二进制发行版安装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