• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • MeCab全文分析器插件

    内置的MySQL全文分析器使用单词之间的空白作为定界符来确定单词的开始和结束位置,这在使用不使用单词定界符的表意语言时是一个限制。为了解决日语的这一限制,MySQL提供了MeCab全文分析器插件。支持MeCab全文分析器插件与InnoDB和一起使用MyISAM

    注意

    MySQL还提供了一个支持日语的ngram全文分析器插件。有关更多信息,请参见“ ngram全文分析器”。

    MeCab全文分析器插件是日语的全文分析器插件,可将一系列文本标记化为有意义的单词。例如,MeCab将“データベース管理”(“数据库管理”)标记化为“データベース”(“数据库”)和“管理”(“管理”)。相比之下, ngram全文分析器将文本标记为连续的n字符序列,其中n代表到10之间的数字。

    除了将文本标记为有意义的单词外,MeCab索引通常比ngram索引小,而MeCab全文搜索通常更快。一个缺点是,与ngram全文语法分析器相比,MeCab全文语法分析器对文档进行标记化可能需要更长的时间。

    “全文搜索功能”中描述的全文搜索语法适用于MeCab解析器插件。本节介绍了解析行为的差异。全文相关的配置选项也适用。

    有关MeCab解析器的其他信息,请参阅Github上的 MeCab:语音和词法分析器的另一个部分。

    安装MeCab Parser插件

    MeCab解析器插件需要mecabmecab-ipadic

    在受支持的Fedora,Debian和Ubuntu平台(系统mecab版本过旧的Ubuntu 12.04除外)上,mecab如果将MySQL 安装到默认位置,则MySQL动态链接到系统安装。在其他受支持的类似于Unix的平台上,libmecab.so静态链接到libpluginmecab.so位于MySQL插件目录中的。mecab-ipadic包含在MySQL二进制文件中,位于中MYSQL_HOME\lib\mecab

    您可以安装mecabmecab-ipadic使用本机软件包管理实用程序(在Fedora,Debian和Ubuntu上),也可以从源代码进行构建mecab和构建mecab-ipadic。有关安装mecabmecab-ipadic使用本机软件包管理实用程序的信息,请参阅从二进制分发版安装MeCab(可选)。如果你想建立mecabmecab-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配置文件的位置可能会有所不同。

      有关MySQL配置文件及其位置的信息,请参见“使用选项文件”。

    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配置文件以指定要使用的词典。在mecab-ipadic与MySQL二进制分布包包括三个字典(ipadic_euc-jpipadic_sjis,和ipadic_utf-8)。mecabrc与MySQL打包在一起的配置文件包含和类似于以下内容的条目:

      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 dicdir,则mecabrc文件中的默认条目将有所不同,字典及其位置也将有所不同。

      注意

      安装MeCab解析器插件后,您可以使用mecab_charset状态变量参见与MeCab一起使用的字符集。MySQL二进制文件随附的三个MeCab词典支持以下字符集。

      • ipadic_euc-jp词典支持ujiseucjpms字符集。
      • ipadic_sjis词典支持sjiscp932字符集。
      • ipadic_utf-8词典支持utf8utf8mb4字符集。

      mecab_charset仅报告第一个支持的字符集。例如,ipadic_utf-8字典同时支持utf8utf8mb4mecab_charset始终utf8在使用此词典时报告。

    4. 重新启动MySQL。
    5. 安装MeCab解析器插件:

      MeCab解析器插件是使用INSTALL PLUGIN语法安装的。插件名称为mecab,共享库名称为libpluginmecab.so。有关安装插件的更多信息,请参见“MySQL服务器插件”。

      INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
      

      安装后,MeCab解析器插件会在每次正常的MySQL重新启动时加载。

    6. 使用以下SHOW PLUGINS语句验证是否已加载MeCab解析器插件。

      mysql> SHOW PLUGINS;
      

      一个mecab插件应该出现在插件列表。

    创建使用MeCab解析器的FULLTEXT索引

    要创建FULLTEXT一个使用仲裁处解析器指数,指定WITH PARSER ngramCREATE TABLEALTER TABLECREATE INDEX

    此示例演示了如何创建具有mecabFULLTEXT索引的表,插入样本数据以及参见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 TABLECREATE 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 Parser术语搜索

    对于自然语言模式搜索,搜索词将转换为令牌的并集。例如,データベース管理被转换为データベース管理。

    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 Parser通配符搜索

    通配符搜索词未标记。在前缀デーデース管理上执行performed ータベース管理*的搜索。

    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. 下载的tar.gz包mecab,并mecab-ipadic从 http://taku910.github.io/mecab/#download。截至2016年2月,最新的可用软件包为mecab-0.996.tar.gzmecab-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_MECABCMake选项编译MySQL 。将WITH_MECAB选项设置为(system如果已安装)mecabmecab-ipadic默认位置。

      -DWITH_MECAB=system
      

      如果定义了定制安装目录,请设置WITH_MECAB为定制目录。例如:

      -DWITH_MECAB=/path/to/mecab