14.9.9 MeCab 全文解析器插件
内置的 MySQL 全文解析器使用空格来确定单词的开始和结束,限制了处理不使用空格分隔符的语言。为了解决这个问题,MySQL 提供了 MeCab 全文解析器插件。MeCab 全文解析器插件支持与 InnoDB
和 MyISAM
一起使用。
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 解析器插件需要mecab
和 mecab-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)安装mecab
和 mecab-ipadic
,或者从源代码构建。关于使用本地包管理工具安装mecab
和 mecab-ipadic
的信息,请见从二进制分布式安装 MeCab(可选)。如果您想从源代码构建mecab
和 mecab-ipadic
,请见从源代码安装 MeCab(可选)。
在 Windows 平台上,libmecab.dll
位于 MySQL bin
目录中。mecab-ipadic
位于
。Mysql_home
/lib/mecab
安装和配置 MeCab 解析器插件,按照以下步骤进行:
-
在 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 节,“使用选项文件”。
-
在 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
-
修改
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
条目可能不同,因为词典和它们的位置也不同。NoteMeCab 解析器插件安装后,您可以使用
mecab_charset
状态变量来查看 MeCab 使用的字符集。 MySQL 二进制提供的三个 MeCab 词典支持以下字符集。-
该
ipadic_euc-jp
字典支持ujis
和eucjpms
字符集。 -
该
ipadic_sjis
字典支持sjis
和cp932
字符集。 -
该
ipadic_utf-8
字典支持utf8mb3
和utf8mb4
字符集。
mecab_charset
只报告第一个支持的字符集。例如,ipadic_utf-8
字典同时支持utf8mb3
和utf8mb4
。mecab_charset
总是报告utf8
,当使用该字典时。 -
-
重新启动 MySQL。
-
安装 MeCab 解析器插件:
INSTALL PLUGIN
使用来安装插件。插件名称是mecab
,共享库名称是libpluginmecab.so
。关于安装插件的其他信息,请参阅第7.6.1节,“安装和卸载插件”。INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
安装后,MeCab 解析器插件在每个正常 MySQL 重新启动时加载。
-
使用
SHOW PLUGINS
语句验证 MeCab 解析器插件是否加载。mysql> SHOW PLUGINS;
一个
mecab
插件应该出现在插件列表中。
要创建使用 MeCab 解析器的 FULLTEXT
索引,指定 WITH PARSER ngram
与CREATE TABLE
、ALTER TABLE
或CREATE 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 TABLE
或CREATE 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);
mecab
和 mecab-ipadic
可以使用二进制分布式包管理工具进行安装。例如,在 Fedora 上,您可以使用 Yum 进行安装:
$> yum mecab-devel
在 Debian 或 Ubuntu 上,您可以使用 APT 进行安装:
$> apt-get install mecab
$> apt-get install mecab-ipadic
如果您想从源代码构建 mecab
和 mecab-ipadic
,基本的安装步骤如下。关于 MeCab 文档请参阅 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