MySQL - MATCH 运算符



MySQL 的MATCH运算符用于在指定的列列表中搜索特定字符串,并在匹配的情况下返回列的内容。

此运算符使用全文索引执行搜索操作。全文索引是一种特殊的索引,允许对大型数据集进行高效的基于文本的搜索。

创建具有全文索引的表时,MySQL 会构建包含在指定列中的单词的索引。然后,MATCH 运算符使用此索引快速搜索与搜索条件匹配的字符串。

语法

以下是 MySQL MATCH 运算符的语法:

MATCH (col1,col2,...) AGAINST (expr [search_modifier])
search_modifier:
  {
       IN NATURAL LANGUAGE MODE
     | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
     | IN BOOLEAN MODE
     | WITH QUERY EXPANSION
  }

其中,

  • (col1, col2, ...) 是您要在其中进行搜索的列名列表,用逗号分隔。

  • expr 是表示要搜索的字符串的字符串值,作为参数。

示例

假设我们使用 CREATE 语句创建了一个名为“Tutorials_table”的表,并在其中插入了记录,除了“Contents”列:

CREATE TABLE Tutorials_table (
   ID INT, 
   Title VARCHAR(20), 
   Contents LONGTEXT
);

现在,让我们使用 INSERT 语句向其中插入记录:

INSERT INTO Tutorials_table (ID, Title) VALUES 
(1, 'Java'),
(2, 'JavaFX'),
(3, 'Coffee Script'),
(4, 'OpenCV');

假设在 MySQL 数据目录中(例如:C:\ProgramData\MySQL\MySQL Server 8.0\Uploads)有 4 个文本文件:

java.txt

Java is a high-level programming language originally developed by Sun Microsystems and released in 1995. Java runs on a variety of platforms, such as Windows, Mac OS, and the various versions of UNIX.

Javafx.txt

JavaFX is a Java library used to build Rich Internet Applications. The applications written using this library can run consistently across multiple platforms. The applications developed using JavaFX can run on various devices such as Desktop Computers, Mobile Phones, TVs, Tablets, etc.

coffee.txt

CoffeeScript is a light weight language which transcompiles into JavaScript. It provides better syntax avoiding the quirky parts of JavaScript, still retaining the flexibility and beauty of the language.

opencv.txt

OpenCV is a cross-platform library using which we can develop real-time computer vision applications. It mainly focuses on image processing, video capture and analysis including features like face detection and object detection. 

现在,让我们将上述文本文件的内容作为“Tutorials_table”表中“Contents”列的值:

UPDATE Tutorials_table SET Contents = LOAD_FILE('C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/java.txt') WHERE ID=1;
UPDATE Tutorials_table SET Contents = LOAD_FILE('C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/javafx.txt') WHERE ID=2;
UPDATE Tutorials_table SET Contents = LOAD_FILE('C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/coffee.txt') WHERE ID=3;
UPDATE Tutorials_table SET Contents = LOAD_FILE('C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/opencv.txt') WHERE ID=4;

您可以使用以下 SELECT 查询验证表的内容:

SELECT * FROM Tutorials_table;

您可以观察到如下表所示的插入数据:

ID 标题 内容
1 Java Java 是一种高级编程语言,最初由 Sun Microsystems 开发,并于 1995 年发布。Java 运行在各种平台上,例如 Windows、Mac OS 和各种版本的 UNIX。
2 JavaFX JavaFX 是一个用于构建富互联网应用程序的 Java 库。使用此库编写的应用程序可以在多个平台上一致运行。使用 JavaFX 开发的应用程序可以在各种设备上运行,例如台式电脑、手机、电视、平板电脑等。
3 Coffee Script CoffeeScript 是一种轻量级语言,它可以编译成 JavaScript。它提供了更好的语法,避免了 JavaScript 中古怪的部分,同时保留了语言的灵活性和美感。
4 OpenCV OpenCV 是一个跨平台库,我们可以使用它来开发实时计算机视觉应用程序。它主要关注图像处理、视频捕获和分析,包括人脸检测和物体检测等功能。

要在“Contents”列上执行全文搜索,请向需要在其中搜索的表的列添加全文索引:

ALTER TABLE Tutorials_table ADD FULLTEXT(Contents);

获得的输出如下:

Query OK, 0 rows affected, 1 warning (0.32 sec)
Records: 0  Duplicates: 0  Warnings: 1

现在,您可以使用 MATCH 运算符搜索特定字符串(例如“Java”)在“Contents”列中,并在找到匹配项时检索完整的记录:

SELECT * FROM Tutorials_table 
WHERE MATCH (Contents) AGAINST ('Java');

产生的结果如下所示:

ID 标题 内容
1 Java Java 是一种高级编程语言,最初由 Sun Microsystems 开发,并于 1995 年发布。Java 运行在各种平台上,例如 Windows、Mac OS 和各种版本的 UNIX。
2 JavaFX JavaFX 是一个用于构建富互联网应用程序的 Java 库。使用此库编写的应用程序可以在多个平台上一致运行。使用 JavaFX 开发的应用程序可以在各种设备上运行,例如台式电脑、手机、电视、平板电脑等。

使用通配符的 MATCH 运算符

MySQL MATCH 运算符也可以与通配符(例如 % 和 _)一起使用,以搜索全文搜索中的特定模式。

示例

假设先前创建的表“Tutorials_table”,让我们搜索以“JavaFX”开头的字符串,使用以下查询:

SELECT * FROM Tutorials_table 
WHERE MATCH (Contents) AGAINST ('%JavaFX');

上述代码的输出如下:

ID 标题 内容
2 JavaFX JavaFX 是一个用于构建富互联网应用程序的 Java 库。使用此库编写的应用程序可以在多个平台上一致运行。使用 JavaFX 开发的应用程序可以在各种设备上运行,例如台式电脑、手机、电视、平板电脑等。

使用 REGEXP 的 MATCH 运算符

您还可以将 MATCH 运算符与正则表达式 (REGEXP) 一起使用。在这里,我们正在搜索 Tutorials_table 中的字符串,该字符串在 Contents 列中包含“HTML”或“JavaFX”:

SELECT * FROM Tutorials_table 
WHERE MATCH (Contents) AGAINST ('HTML|JavaFX');

执行上述代码后,我们将得到以下输出:

ID 标题 内容
2 JavaFX JavaFX 是一个用于构建富互联网应用程序的 Java 库。使用此库编写的应用程序可以在多个平台上一致运行。使用 JavaFX 开发的应用程序可以在各种设备上运行,例如台式电脑、手机、电视、平板电脑等。
mysql-match-operator.htm
广告