【MySQL精通之路】全文搜索(9)-全文解析器-MeCab

devtools/2024/10/4 19:35:28/

主博客:

【MySQL精通之路】全文搜索功能-CSDN博客


目录

1.介绍

MeCab%20Parser%E6%8F%92%E4%BB%B6-toc" style="margin-left:0px;">2.安装MeCab Parser插件

MeCab%E5%88%86%E6%9E%90%E5%99%A8%E7%9A%84FULLTEXT%E7%B4%A2%E5%BC%95-toc" style="margin-left:0px;">3.创建使用MeCab分析器的FULLTEXT索引

MeCab%20Parser%E7%A9%BA%E9%97%B4%E5%A4%84%E7%90%86-toc" style="margin-left:0px;">4.MeCab Parser空间处理

MeCab%E5%88%86%E6%9E%90%E7%A8%8B%E5%BA%8F%E5%81%9C%E6%AD%A2%E5%AD%97%E5%A4%84%E7%90%86-toc" style="margin-left:0px;">5.MeCab分析程序停止字处理

MeCab%20Parser%E6%9C%AF%E8%AF%AD%E6%90%9C%E7%B4%A2-toc" style="margin-left:0px;">6.MeCab Parser术语搜索

MeCab%E5%88%86%E6%9E%90%E7%A8%8B%E5%BA%8F%E9%80%9A%E9%85%8D%E7%AC%A6%E6%90%9C%E7%B4%A2-toc" style="margin-left:0px;">7.MeCab分析程序通配符搜索

MeCab%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8%E7%9F%AD%E8%AF%AD%E6%90%9C%E7%B4%A2-toc" style="margin-left:0px;">8.MeCab语法分析器短语搜索

MeCab%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89-toc" style="margin-left:0px;">9.从二进制分布安装MeCab(可选)

MeCab%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89-toc" style="margin-left:0px;">10.从源安装MeCab(可选)


1.介绍

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

MySQL还提供了一个支持中文日语朝鲜语(CJK)的ngram全文解析器插件。有关更多信息,请参阅“ngram全文分析器”。

【MySQL精通之路】全文解析器-ngram-CSDN博客

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

除了将文本标记为有意义的单词外,MeCab索引通常小于ngram索引,并且MeCab全文搜索通常更快。一个缺点是,与ngram全文解析器相比,MeCab全文解析器可能需要更长的时间来标记文档。
第14.9节“全文搜索函数”中描述的全文搜索语法适用于MeCab解析器插件。本节将介绍解析行为的差异。与全文相关的配置选项也适用。
有关MeCab解析器的更多信息,请参阅Github上的MeCab:另一个词性和形态分析器项目。

MeCab%20Parser%E6%8F%92%E4%BB%B6">2.安装MeCab Parser插件

MeCab解析器插件需要MeCabMeCab ipadic。

在受支持的Fedora、Debian和Ubuntu平台上(除了Ubuntu 12.04,其中系统mecab版本太旧),如果安装到默认位置,MySQL会动态链接到系统mecab安装。

在其他支持的类Unix平台上,libmecab.so静态链接在libpluginmecab.so中,后者位于MySQL插件目录中。

mecab ipadic包含在MySQL二进制文件中,位于MySQL_HOME\lib\mecab中。

您可以使用本地包管理实用程序(在Fedora、Debian和Ubuntu上)安装mecab和mecab ipadic,也可以从源代码构建mecab或mecab ipadic。

有关使用本机软件包管理实用程序安装mecab和mecab ipadic的信息,请参阅9节二进制分发安装mecab(可选)。

如果要从源代码构建mecab和mecab ipadic,请参阅10节源代码创建mecab(可选)。

在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

松散前缀是一个选项修饰符。在安装mecab解析器插件之前,MySQL不会识别mecab_rc_file选项,但在尝试安装mecab解析器插件之前必须设置该选项。松散前缀允许您重新启动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配置文件以指定要使用的词典。与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状态变量查看MeCab使用的字符集。MySQL二进制文件提供的三个MeCab字典支持以下字符集。

ipadic_euc-jp字典支持uji和eucjpms字符集。

ipadic_sjis字典支持sjis和cp932字符集。

ipadic_utf-8字典支持utf8mb3和utf8mb4字符集。

mecab_charset只报告第一个支持的字符集。例如,ipadic_utf-8字典同时支持utf8mb3和utf8mb4。当使用此词典时,mecab_charset总是报告utf8。

4. 重启MySQL.

5.安装MeCab解析器插件

MeCab解析器插件是使用INSTALL plugin安装的。插件名称为mecab,共享库名称为libpluginmecb.so。有关安装插件的更多信息,请参阅“安装和卸载插件”。

INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';

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

验证是否使用SHOW PLUGINS语句加载了MeCab解析器插件

mysql> SHOW PLUGINS;

mecab插件应该出现在插件列表中。


MeCab%E5%88%86%E6%9E%90%E5%99%A8%E7%9A%84FULLTEXT%E7%B4%A2%E5%BC%95">3.创建使用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;# Or:CREATE FULLTEXT INDEX ft_index ON articles (title,body) WITH PARSER mecab;

MeCab%20Parser%E7%A9%BA%E9%97%B4%E5%A4%84%E7%90%86">4.MeCab Parser空间处理

MeCab解析器在查询字符串中使用空格作为分隔符。例如,MeCab解析器标记化

データベース管理 as データベース and 管理.

MeCab%E5%88%86%E6%9E%90%E7%A8%8B%E5%BA%8F%E5%81%9C%E6%AD%A2%E5%AD%97%E5%A4%84%E7%90%86">5.MeCab分析程序停止字处理

默认情况下,MeCab解析器使用默认的停止语列表,其中包含英文停止语的短列表。对于适用于日语的停止语列表,您必须创建自己的列表。有关创建停止语列表的信息,请参阅“全文停止语”。

MeCab%20Parser%E6%9C%AF%E8%AF%AD%E6%90%9C%E7%B4%A2">6.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%E5%88%86%E6%9E%90%E7%A8%8B%E5%BA%8F%E9%80%9A%E9%85%8D%E7%AC%A6%E6%90%9C%E7%B4%A2">7.MeCab分析程序通配符搜索

通配符搜索项未标记化。上的搜索データベース管理* 对前缀执行,データベース管理.

SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('データベース*' IN BOOLEAN MODE);

MeCab%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8%E7%9F%AD%E8%AF%AD%E6%90%9C%E7%B4%A2">8.MeCab语法分析器短语搜索

短语被标记。例如データベース管理 标记为データベース 管理.

SELECT COUNT(*) FROM articles WHERE MATCH(title,body) AGAINST('"データベース管理"' IN BOOLEAN MODE);

MeCab%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89">9.从二进制分布安装MeCab(可选)

本节介绍如何使用本机包管理实用程序从二进制发行版安装mecab和mecab ipadic。例如,在Fedora上,您可以使用Yum执行安装:

yum mecab-devel

在Debian或Ubuntu上,您可以执行APT安装:

apt-get install mecab
apt-get install mecab-ipadic

MeCab%EF%BC%88%E5%8F%AF%E9%80%89%EF%BC%89">10.从源安装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


http://www.ppmy.cn/devtools/43319.html

相关文章

设计模式——概述

1.设计模式定义 ​ 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性&#…

重新安装 Windows 10/11 后如何恢复丢失的数据?

“嗨,我的 Windows 10/11 崩溃了,所以我不得不重新安装它。我使用 USB 可启动驱动器重新安装了操作系统。但是,重新安装后,C 盘上的所有先前文件都丢失了。有什么方法可以恢复丢失的文件吗?” - 孙雯 在大多数情况下&…

STM32硬件接口I2C应用(基于BMP085)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 大气压力传感器BMP085 3.1 BMP085介绍 3.2 BMP085的应用电路 3.3 BMP085操作流程 3.4 BMP085寄存器 3.5 开始温…

消息队列出现消息积压应该如何处理

当消费者出现异常,很容易引起队列积压,如果一秒钟1000个消息,那么一个小时就是几千万的消息积压,是非常可怕的事情,但是生产线上又有可能会出现; 当消息积压来不及处理,rabbitMQ如果设置了消息过…

C++ day1 作业练习

整理思维导图 定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream> #include <cstring>using namespace std; namespace my_space {string s1; }void show() {cout<…

C# 实现微信公众号生成场景二维码

目录 关于场景二维码 开发前准备 范例运行环境 设计与实现 临时二维码 永久二维码 小结 关于场景二维码 公众平台生成场景二维码&#xff0c;是为了满足用户渠道推广分析、用户账号绑定等场景的需要&#xff0c;使用生成接口可以获得多个带不同场景值的二维码&#xff…

Vue 状态管理深入研究:Vuex 和 Pinia 的原理与实践对比

推荐一个AI网站&#xff0c;免费使用豆包AI模型&#xff0c;快去白嫖&#x1f449;海鲸AI &#x1f44b; 引言 在 Vue.js 应用程序中&#xff0c;状态管理是一个至关重要的方面。它有助于集中管理应用的状态&#xff0c;使组件之间的数据共享更加高效和可维护。Vuex 和 Pinia …

C语言 数组——排序算法的函数实现

目录 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序