MySQL 的内置全文搜索解析器使用单词之间的空格作为分隔符来确定单词的开始和结束,这在处理不使用单词分隔符的ideographic 语言时是一个限制。为了解决这个限制,MySQL 提供了一个 MeCab 全文搜索解析器插件。MeCab 全文搜索解析器插件支持使用 InnoDB
和 MyISAM
。
MySQL 还提供了一个 ngram 全文搜索解析器插件,支持日本语。有关更多信息,请参阅 第 14.9.8 节“ngram 全文搜索解析器”。
MeCab 全文搜索解析器插件是一个日本语全文搜索解析器插件,它将文本序列分解成有意义的单词。例如,MeCab 将 “データベース管理” (“数据库管理”) 分解成 “データベース” (“数据库”) 和 “管理” (“管理”)。相比之下,ngram 全文搜索解析器将文本分解成连续的 n
个字符序列,其中 n
代表 1 到 10 之间的数字。
除了将文本分解成有意义的单词外,MeCab 索引通常比 ngram 索引小,MeCab 全文搜索速度也更快。一个缺点是 MeCab 全文搜索解析器可能需要更长时间来分解文档,相比之下 ngram 全文搜索解析器。
本节中描述的全文搜索语法适用于 MeCab 解析器插件。解析行为的差异在本节中描述。全文相关的配置选项也适用。
有关 MeCab 解析器的更多信息,请参阅 MeCab:Yet Another Part-of-Speech and Morphological Analyzer 项目在 Github 上。
安装 MeCab 解析器插件
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-ipadic
的信息,请参阅 从二进制分布安装 MeCab(可选)。如果您想从源代码构建 mecab
和 mecab-ipadic
,请参阅 从源代码构建 MeCab(可选)。
在 Windows 上,libmecab.dll
位于 MySQL bin
目录中。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
是一个 选项修改器。选项mecab_rc_file
不会被 MySQL 识别,直到 MeCaB 解析器插件安装完毕,但它必须在尝试安装 MeCaB 解析器插件之前设置。前缀loose
允许您在不遇到未识别变量错误的情况下重新启动 MySQL。如果您使用自己的 MeCab 安装或从源代码构建 MeCab,
mecabrc
配置文件的位置可能不同。有关 MySQL 配置文件及其位置的信息,请参阅 第 6.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
-
修改
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
状态变量来查看与 MeCab 一起使用的字符集。三个 MeCab 词典提供的 MySQL 二进制文件支持以下字符集。-
词典
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 解析器插件。插件名称是mecab
,共享库名称是libpluginmecab.so
。有关安装插件的更多信息,请参阅 第 7.6.1 节,“安装和卸载插件”。INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
安装后,MeCab 解析器插件将在每次正常的 MySQL 重新启动时加载。
-
使用
SHOW PLUGINS
语句验证 MeCab 解析器插件是否加载。mysql> SHOW PLUGINS;
插件列表中应该出现一个
mecab
插件。
使用 MeCab 解析器创建 FULLTEXT 索引
要创建使用 MeCab 解析器的 FULLTEXT
索引,请在 CREATE TABLE
、ALTER TABLE
或 CREATE INDEX
中指定 WITH PARSER ngram
。
这个示例演示了创建一个具有 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 解析器使用查询字符串中的空格作为分隔符。例如,MeCab 解析器将 データベース管理 tokenized 为 データベース 和 管理。
MeCab 解析器停止词处理
默认情况下,MeCab 解析器使用默认的停止词列表,该列表包含一份简短的英语停止词列表。对于适用于日语的停止词列表,您必须创建自己的。有关创建停止词列表的信息,请参阅 第 14.9.4 节,“全文停止词”。
MeCab 解析器词搜索
对于自然语言模式搜索,搜索词被转换为 tokens 的联合体。例如,データベース管理 被转换为 データベース 管理。
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 解析器通配符搜索
通配符搜索词不被 tokenized。例如,对 データベース管理* 的搜索是在前缀 データベース管理 上进行的。
SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);
MeCab 解析器短语搜索
短语被 tokenized。例如,データベース管理 被 tokenized 为 データベース 管理。
SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('"データベース管理"' IN BOOLEAN MODE);
从二进制分布安装 MeCab(可选)
本节描述了如何使用本机包管理实用程序从二进制分布安装 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