前言
最近在学习和了解 MySQL 8 自带的全文搜索功能。自己在看资料的时候顺便翻译了一下,希望对大家有用。(章节序号可能有所差异,因为官方文档会不定期更新)
官方原文链接如下:《MeCab Full-Text Parser Plugin》
内置的MySQL全文解析器使用单词之间的空格作为分隔符来确定单词的开始和结束位置,这在使用不使用单词分隔符的表意语言时是一个限制。为了解决日语的这一限制,MySQL提供了一个MeCab全文解析器插件。InnoDB 和 MyISAM 引擎都支持使用 MeCab 全文解析器插件。
注意
MySQL还提供了一个支持日语的 ngram全文解析器插件。更多信息,请参阅《12.9.8 ngram 全文解析器》。
MeCab 全文解析器插件是一个日语全文解析器插件,可将文本序列标记为有意义的单词。比如, MeCab将“データベース管理”(“数据库管理”)标记为“データベース”(“数据库”)和“管理”(“管理”)。相比之下,ngram 全文解析器将文本标记化为连续的 n 个字符序列,其中 n 表示 1 到 10 之间的数字。
除了将文本标记成有意义的单词外,MeCab 索引通常比 ngram 索引小,并且 MeCab 全文搜索通常更快。 一个缺点是,与 ngram 全文解析器相比,MeCab 全文解析器可能需要更长的时间来标记文档。
在《12.9 全文搜索功能》中所描述的全文搜索相关语法细节可以应用于MeCab 解析器插件。本节将介绍分析行为的差异。与全文相关的配置选项也适用。
有关 MeCab 解析器的其他信息,请参阅 MeCab: Yet Another Part-of-Speech and Morphological AnalyzerGithub上的项目资料。
安装 MeCab 解析器插件
MeCab 解析器插件需要 mecab 和 mecab-ipadic。
在受支持的 Fedora、Debian 和 Ubuntu 平台上(系统 mecab 版本太旧的 Ubuntu 12.04 除外),如果 MySQL 安装到默认位置,则会动态链接到系统 mecab 安装。在其他受支持的类 Unix 平台上,libmecab.so 静态链接位于 MySQL 插件目录中 libpluginmecab.so 中。mecab-ipadic 包含在MySQL二进制文件中,并且 位于 MYSQL_HOME\lib\mecab 目录。
您可以使用本机软件包管理实用程序(在 Fedora、Debian 和 Ubuntu 上)安装 mecab 和 mecab-ipadic,也可以从源代码构建 mecab 和 mecab-ipadic。有关使用本机包管理实用程序安装 mecab 和 mecab-ipadic 的信息,参阅 Installing MeCab From a Binary Distribution (Optional)。如果要从源代码构建 mecab 和 mecab-ipadic,参阅 Building MeCab From Source (Optional)。
在 Windows 上,libmecab.dll位于 MySQL bin 目录中。mecab-ipadic位于MYSQL_HOME/lib/mecab。
要安装和配置 MeCab 解析器插件,请执行以下步骤:
1、在 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配置文件及其位置的信息,参阅 Using Option Files。
2、同样在 MySQL 配置文件中,将最小字长大小设置为 1 或 2,这是建议与 MeCab 解析器一起使用的值。对于 InnoDB 表,最小字长大小由 innodb_ft_min_token_size 配置选项定义,该选项的默认值为 3。
3、对于 MyISAM 表,最小令牌大小由 ft_min_word_len 定义,默认值为 4。
[mysqld] innodb_ft_min_token_size=1
4、修改 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 条目可能会有所不同,字典及其位置也会有所不同。
注意
安装 MeCab 解析器插件后,可以使用 mecab_charset status 变量查看 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。
5、重启 MySQL
6、安装 MeCab 解析器插件
MeCab 解析器插件是使用 INSTALL PLUGIN 安装的。插件名称为 mecab,共享库名称为 libpluginmecab.so。有关安装插件的其他信息, 参阅 “Installing and Uninstalling Plugins”。
INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
安装后,MeCab 解析器插件会在每次正常的 MySQL 重启时加载。
7、使用 SHOW PLUGINS 语句验证 MeCab 解析器插件是否已加载。
mysql> SHOW PLUGINS;
mecab 插件应出现在插件列表中。
创建使用 MeCab 解析器的 FULLTEXT 索引
要创建使用 mecab 解析器的 FULLTEXT 索引,请使用 CREATE TABLE、ALTER TABLE 或 CREATE INDEX 指定 WITH PARSER ngram。此示例演示如何使用 mecab FULLTEXT 索引创建表、插入示例数据以及查看 Information Schema INNODB_FT_INDEX_CACHE表中的标记化数据:
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; # 或者: CREATE FULLTEXT INDEX ft_index ON articles (title,body) WITH PARSER mecab;
MeCab 解析器空间处理
MeCab 解析器使用空格作为查询字符串中的分隔符。例如,MeCab 解析器将 データベース 管理标记为 データベース 和 管理。
MeCab 解析器停用字处理
默认情况下,MeCab 解析器使用默认的停用字列表,其中包含英语停用字的简短列表。对于适用于日语的停用字列表,您必须创建自己的停用字列表。有关创建停用字列表的信息,参阅《12.9.4 全文搜索的停用字》。
MeCab 解析器术语搜索
对于自然语言模式搜索,搜索词将转换为标记的联合。例如,データベース管理转换为データベース管理。
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 解析器通配符搜索
通配符搜索词不会标记化。对データベース管理*的搜索是在前缀データベース管理上执行的。
SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);MeCab 解析器短语搜索
短语被标记化。例如,データベース管理被标记为 データベース 管理。
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 文档。
1、从以下位置下载 mecab 和 mecab-ipadic 的 tar.gz 软件包 http://taku910.github.io/mecab/#download. 截至 2016 年 2 月,最新的可用软件包是 mecab-0.996.tar.gz 和 mecab-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_MECAB CMake 选项编译 MySQL。如果您已将 mecab 和 mecab-ipadic 安装到默认位置,请将 WITH_MECAB 选项设置为 system。
-DWITH_MECAB=system
如果定义了自定义安装目录,请将WITH_MECAB设置为自定义目录。例如:
-DWITH_MECAB=/path/to/mecab