MySQL - 自然语言全文搜索

MySQL - 自然语言全文搜索 首页 / MySQL入门教程 / MySQL - 自然语言全文搜索

自然语言全文搜索将搜索字符串解释为自然人语言中的文字短语,不支持特殊字符。如果未指定任何修改器或指定自然语言模式修饰符时,则默认启用。

可以使用 match()against()函数来执行自然语言全文搜索。match()函数用于指定要执行搜索的列名,并且against()函数确定要使用的搜索字符串。

例子

让无涯教程首先创建一个表 post ,具有全文索引,包括 title descriptions列。这是查询:

mysql> CREATE TABLE Posts (
	id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
	title VARCHAR(200),
	descriptions TEXT,
	FULLTEXT (title, descriptions)
) ENGINE = InnoDB;

接下来,将记录填充到此表中以解释全文搜索:

mysql> INSERT INTO Posts VALUES
('0', 'MySQL Tutorial', 'MySQL tutorial provides basic and advanced concepts for beginners ...'),
('0', 'Java Regex', 'Java Regex is a regular expression for searching or manipulating strings. ...'),
('0', 'MySQL Workbench','It is a GUI tool used to work with database ....'),
('0', 'What is Java', 'Java is a platform-indipendent, object-oriented and secure language ...'),
('0', 'MySQL Versions', 'This section shows all MySQL versions ...');

现在将使用match()和against()函数执行全文搜索,如下所示:

mysql> SELECT * FROM Posts 
WHERE MATCH (title, descriptions) AGAINST ('Java');

以下是已经对字符串"tutorial"进行了全文搜索的输出:

MySQL Natural Language FULLTEXT Search

如果要获取包含 java和 Workbench 术语,无涯教程可以使用以下语法如下:

mysql> SELECT * FROM Posts 
WHERE MATCH (title, descriptions) AGAINST ('Java, Workbench');

执行该语句,将获得以下结果:

MySQL Natural Language FULLTEXT Search

知道默认AGAINST()函数在自然语言模式搜索修饰语中使用;这就是为什么可以省略它在查询中。在上面的语句中使用自然语言模式搜索修饰程序,并查看结果:

mysql> SELECT * FROM Posts 
WHERE MATCH (title, descriptions) AGAINST ('Java, Workbench' IN NATURAL LANGUAGE MODE); 

执行查询,将获得与以前相同的结果:

MySQL Natural Language FULLTEXT Search

如果想要计算匹配的匹配数,无涯教程可以使用如下所示:

mysql> SELECT COUNT(*) FROM Posts 
WHERE MATCH (title, descriptions) AGAINST ('Java, Workbench' IN NATURAL LANGUAGE MODE);

这是结果:

无涯教程网

链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-natural-language-fulltext-search.html

来源:LearnFk无涯教程网

MySQL Natural Language FULLTEXT Search

如果想明确检索相关性值,需要使用以下语法。此语句不会排序返回的行,因为它既不使用条款的WHERE NOR顺序:

mysql> SELECT id, MATCH (title, descriptions) 
AGAINST ('Java, Workbench' IN NATURAL LANGUAGE MODE) FROM Posts;

执行查询,将获得所需的结果:

MySQL Natural Language FULLTEXT Search

如果想要来检查文本相关性并根据递减相关性排序行,可以使用如下所示:

mysql> SELECT id, title, MATCH (title, descriptions) 
AGAINST ('Java, Workbench' IN NATURAL LANGUAGE MODE) AS relevance_score 
FROM Posts WHERE MATCH (title, descriptions) 
AGAINST ('Java, Workbench' IN NATURAL LANGUAGE MODE);

执行查询,无涯教程将获得所需的结果:

MySQL Natural Language FULLTEXT Search

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

技术教程推荐

AI技术内参 -〔洪亮劼〕

数据分析实战45讲 -〔陈旸〕

大规模数据处理实战 -〔蔡元楠〕

OpenResty从入门到实战 -〔温铭〕

分布式系统案例课 -〔杨波〕

零基础入门Spark -〔吴磊〕

郭东白的架构课 -〔郭东白〕

去无方向的信 -〔小麥〕

AI大模型之美 -〔徐文浩〕

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