详解MySQL的MATCH()函数:判断一个值是否与一个全文索引中的任何值匹配

  • Post category:MySQL

MATCH()函数是MySQL内置的全文搜索函数,可以用于对某一列或多列进行全文搜索。在使用该函数前,需要先创建全文索引,才能对该列或者多列进行全文搜索。

使用方法:

MATCH (`column1`, `column2`, ...) AGAINST (searchword [searchmodifier])

其中,column1column2为要进行全文搜索的列,多个列之间用逗号分开,searchword为要搜索的关键字,searchmodifier可以是可选项,用于控制搜索方式和结果,例如IN BOOLEAN MODE表示采用布尔模式搜索。

MATCH()函数的返回值为匹配得分,匹配得分越高的结果越接近搜索条件。

实例1:自然语言搜索

例如,如果现在有一张文章表article,其中有一列为title,我要对其中title列进行全文搜索,搜索条件为“学习markdown”,可以使用以下语句:

SELECT * FROM article WHERE MATCH(title) AGAINST('学习markdown' IN NATURAL LANGUAGE MODE)

此时,MySQL会对title列进行全文搜索,并返回所有匹配的行。在这里,我们通过IN NATURAL LANGUAGE MODE让MySQL采用自然语言搜索方式,可以更好地匹配用户提出的关键字。

实例2:布尔模式搜索

现有一张商品表items,其中有一列为description,我要对其中description列进行全文搜索,搜索条件为“电脑 快速”,可以使用以下语句:

SELECT * FROM items WHERE MATCH(description) AGAINST('+电脑 +快速' IN BOOLEAN MODE)

此时,MySQL会对description列进行全文搜索,并返回所有匹配的行。在这里,我们通过IN BOOLEAN MODE让MySQL采用布尔模式搜索,可以更精确地匹配关键字。

注意:在使用MATCH()函数时,需要手动设置全文索引。如果之前没有设置过全文索引,可以使用以下语句来创建全文索引。

对于一列:

ALTER TABLE 表名 ADD FULLTEXT(column1);

对于多列:

ALTER TABLE 表名 ADD FULLTEXT(column1, column2, column3);