MySQL - ngram 全文解析器

MySQL - ngram 全文解析器 首页 / MySQL入门教程 / MySQL - ngram 全文解析器

在本文中,无涯教程将学习使用支持的mysql ngram全文解析器,支持出色语言的全文搜索,如日语,中文和韩语。

MYSQL提供ngram全文解析器以克服此问题。 MySQL 版本5 后,MySQL将Ngram全文解析器提供为内置服务器插件。类似于其他内置插件,MySQL在启动数据库服务器时会自动加载此插件。 InnodB和Myisam存储引擎支持Ngram全文解析器。

根据其在MySQL中的定义,ngram是来自给定文本序列的多个字符的连续序列。 例如,通过使用ngram全文解析器,可以为 n 的不同值授予字符串" java ",如下所示:

N = 1: 'j', 'a', 'v', 'a'
N = 2: 'ja', 'av', 'va'
N = 3: 'jav', 'ava'
N = 4: 'java'

创建全文索引

可以通过在Create表中使用Parser ngram在Create表,Alter Table或Create Index语句中指定带解析器来创建FullText索引。

请考虑以下示例,该示例创建名为“articles”的表,并使用ngram全文解析器添加title和body列。

mysql> CREATE TABLE articles (
      id INT AUTO_INCREMENT PRIMARY KEY,
      title VARCHAR(150),
      body TEXT,
      FULLTEXT (title, body) WITH PARSER ngram
    ) ENGINE=INNODB CHARACTER SET UTF8MB4;

接下来,将使用 set name 语句,将字符设置为 utf8mb4 ,如下所示:

mysql> SET NAMES UTF8MB4; 

接下来,将示例数据(简体中文文本)插入此表如下:

mysql> INSERT INTO articles (title, body) VALUES
    ('?????', '??????????????????'),
    ('???????', '???????????');

最后,将使用以下声明来了解ngram如何授予数据:

mysql> SET GLOBAL innodb_ft_aux_table = "employeedb/articles";

mysql> SELECT * FROM 
INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE 
ORDER BY doc_id, position; 

将获得以下结果:

MySQL ngram Full-Text Parser

设置令牌大小

在前面的示例中,无涯教程可以看到默认情况下,ngram中的令牌大小(n)为2.如果要更改默认令牌大小,需要使用 ngram_token_size 配置选项值为1和10之间的价值范围。值得注于较小的令牌大小进行更小的全文搜索索引,并提供快速搜索。

ngram_token_size是一个只读变量,因此只能使用以下两个选项设置其值:

1.在启动字符串中:

mysqld --ngram_token_size=1

2.在配置文件中:

[mysqld]
ngram_token_size=1

处理空间

在解析时,在ngram解析器中消除了空间。例如:

  • "ab cd"被解析为"ab","cd"
  • "a bc"被解析为"bc"

短语搜索

MySQL将短语搜索转换为Ngram短语搜索。例如,有一个短语搜索"abc",它被转换为"ab bc",返回包含"abc"和"ab bc"的结果。

如果有一个搜索短语"abc def",它被转换为"ab bc de ef",它会返回包含"abc def"和"ab bc de ef"的结果。它不会返回包含"ABCDEF"的文档。

以下语句显示搜索此短语??在articles文章表中:

SELECT id, title, body
FROM articles
WHERE MATCH (title, body) AGAINST ('??');

这是结果:

MySQL ngram Full-Text Parser

处理不同搜索模式

在这里,将使用以下模式处理搜索结果:

自然语言模式

自然语言搜索模式将搜索项转换为Ngram值的联轴。 例如,如果令牌大小为2,则搜索项"mysql"可以转换为的ys sq和ql。请参阅以下声明:

mysql> SELECT * FROM articles 
WHERE MATCH (title, body) 
AGAINST ('?????' IN NATURAL LANGUAGE MODE);

将获得所需的结果:

链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-ngram-full-text-parser.html

来源:LearnFk无涯教程网

MySQL ngram Full-Text Parser

布尔模式

布尔搜索模式将搜索项转换为Ngram短语搜索。请参阅以下声明:

mysql> SELECT * FROM articles 
WHERE MATCH (title, body) 
AGAINST ('?????' IN BOOLEAN MODE);

将获得所需的结果:

链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-ngram-full-text-parser.html

来源:LearnFk无涯教程网

MySQL ngram Full-Text Parser

通配符搜索

当使用通配符以搜索ngram解析器时,它可能会返回意外结果。因为ngram fulltext索引仅包含ngrams,所以这就是为什么它不知道术语的开头。

以下规则用于使用NAM全文索引使用通配符进行搜索:

1.如果ngram令牌大小在通配符中的前缀术语长时间,则查询返回包含以前缀术语开始的Ngram令牌的所有文档。例如:

mysql> SELECT * FROM articles
WHERE MATCH (title, body) AGAINST ('my*');

将获得以下结果:

MySQL ngram Full-Text Parser

2.如果ngram令牌大小短于通配符中的前缀项,则MySQL将前缀术语转换为ngram短语,并且忽略通配符运算符。例如

mysql> SELECT * FROM articles
WHERE MATCH (title, body) AGAINST ('mysql');

无涯教程将获得以下结果,术语"mysql"被转换为ngram短语:"My""ys""sq""ql"。

MySQL ngram Full-Text Parser

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

软件工程之美 -〔宝玉〕

SQL必知必会 -〔陈旸〕

黄勇的OKR实战笔记 -〔黄勇〕

现代C++编程实战 -〔吴咏炜〕

Kafka核心源码解读 -〔胡夕〕

全链路压测实战30讲 -〔高楼〕

Web漏洞挖掘实战 -〔王昊天〕

快手 · 移动端音视频开发实战 -〔展晓凯〕

大型Android系统重构实战 -〔黄俊彬〕

好记忆不如烂笔头。留下您的足迹吧 :)