MATCH()函数是MySQL内置的全文搜索函数,可以用于对某一列或多列进行全文搜索。在使用该函数前,需要先创建全文索引,才能对该列或者多列进行全文搜索。
使用方法:
MATCH (`column1`, `column2`, ...) AGAINST (searchword [searchmodifier])
其中,column1
、column2
为要进行全文搜索的列,多个列之间用逗号分开,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);