暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

MySQL的函数和运算符 - 全文搜索 - MeCab 全文解析器插件

数据库杂货铺 2021-07-07
1455
MeCab 全文解析器插件
 
内置的 MySQL 全文解析器使用单词之间的空格作为分隔符来确定单词的开始和结束位置,这对于不使用单词分隔符的表意语言是一个限制。为了解决日语的这个限制,MySQL 提供了一个 MeCab 全文解析器插件。MeCab 全文解析器插件支持用于 InnoDB MyISAM
 
注意
MySQL 还提供了支持日语的 ngram 全文解析器插件。
 
MeCab 全文解析器插件是用于日语的全文解析器插件,它将文本序列标记解析为有意义的单词。例如,MeCab 将 “データベース管理”(Database Management) 标记解析为 “データベース”(Database)和“管理”(Management)。相比之下,ngram 全文解析器将文本标记解析为 n 个字符的连续序列,其中 n 表示 1 10 之间的数字。
 
MeCab 是用于日语的全文解析器插件,它将文本序列标记解析为有意义的单词。除此之外,MeCab 索引通常比 ngram 索引要小,而且 MeCab 全文搜索通常更快。一个缺点是,与 ngram 全文解析器相比,MeCab 全文解析器可能需要更长的时间来标记文档。
 
安装 MeCab 解析器插件
 
MeCab 解析器插件需要 mecab mecab-ipadic
 
在受支持的 Fedora, Debian Ubuntu 平台上(除了 Ubuntu 12.04 的系统 mecab 版本太旧),如果系统 mecab 被安装到默认位置,MySQL 动态链接到系统 mecab 安装。在其他支持的类 Unix 平台上,libmecab.so 被静态链接到 libpluginmecab.solibpluginmecab.so 位于 MySQL 插件目录中。mecab-ipadic 包含在 MySQL 二进制文件中,位于 MYSQL_HOME\lib\mecab
 
可以使用本地包管理工具(FedoraDebian Ubuntu )安装 mecab mecab-ipadic,或者从源代码构建 mecab mecab-ipadic
 
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 前缀是一个选项修饰符。mecab_rc_file 选项在安装 MeCaB 解析器插件之前不会被 MySQL 识别,但是在尝试安装 MeCaB 解析器插件之前必须设置它。loose 前缀允许重新启动 MySQL 而不会遇到由于无法识别的变量而导致的错误。
     
    如果使用自己的 MeCab 安装,或从源代码构建 MeCab, mecabrc 配置文件的位置可能不同。
     
    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
      复制
       
      3. 修改 mecabrc 配置文件以指定要使用的字典。与 MySQL 二进制文件一起发布的 mecab-ipadic 包包括三个字典(ipadic_euc-jpipadic_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 状态变量来查看 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
           
          4. 重新启动 MySQL
           
          5. 安装 MeCab 解析器插件
           
          MeCab 解析器插件是使用 INSTALL PLUGIN 语法安装的。插件名称是 mecab,共享库名称是 libpluginmecab.so
           
           
            INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
            复制
             
            一旦安装完毕,MeCab 解析器插件就会在 MySQL 每次正常重启时加载。
             
            6. 使用 SHOW PLUGINS 语句验证 MeCab 解析器插件是否已加载。
             
              mysql> SHOW PLUGINS;
              复制
               
              mecab 插件应该出现在插件列表中。
               
              创建使用 MeCab 解析器的 FULLTEXT 索引
               
              要创建使用 mecab 解析器的 FULLTEXT 索引,请使用 CREATE TABLEALTER 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 utf8;

                mysql> SET NAMES utf8;

                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 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 解析器将 データベース管理 标记解析为 データベース 和 管理。
                   
                  MeCab 解析器终止词处理
                   
                  默认情况下,MeCab 解析器使用默认终止词列表,该列表包含一个简短的英文终止词列表。对于适用于日语的终止词列表,必须自己创建。
                   
                  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,下面提供了基本的安装步骤。
                               
                              1.  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
                               
                              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
                                      复制
                                       

                                      备注:

                                       原文中的 Term Search、Phrase Search 区别没整明白,示例也有点儿含糊,文章仅供参考,可能不少地方翻译有误,望自习对比,理解。

                                       
                                       
                                      官方文档:
                                      https://dev.mysql.com/doc/refman/8.0/en/fulltext-search-mecab.html
                                      文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论

                                      筱悦星辰
                                      暂无图片
                                      2年前
                                      评论
                                      暂无图片 0
                                      世上没有不弯的路,人间没有不谢的花,人这一生能力有限,但是努力无限。
                                      2年前
                                      暂无图片 点赞
                                      评论