MySQL自然语言全文搜索
简介:在本教程中,您将通过使用MATCH()和AGAINST()函数学习MySQL自然语言全文搜索。
MySQL自然语言全文搜索简介
在自然语言全文搜索中,MySQL查找与自由文本自然人类语言查询相关的行或文档,例如,"如何使用MySQL自然语言全文搜索"。
相关性是一个正浮点数。
当相关性为零时,表示没有相似性。
MySQL根据各种因素计算相关性,包括文档中单词的数量,文档中唯一单词的数量,集合中单词的总数以及包含特定单词的文档(行)的数量。
要执行自然语言全文搜索,请使用MATCH()和AGAINST()函数。
MATCH()函数指定要搜索的列,而AGAINST()函数确定要使用的搜索表达式。
MySQL自然语言全文搜索示例
我们将使用示例数据库中的产品表进行演示。
首先,使用ALTER TABLE ADD FULLTEXT语句在产品表的productLine列中创建全文搜索:
ALTER TABLE products ADD FULLTEXT(productline);
其次,您可以搜索产品线包含术语Classic的产品。
您可以使用MATCH()和AGAINST()函数作为以下查询:
SELECT productName, productLine FROM products WHERE MATCH(productLine) AGAINST('Classic');
要搜索产品线包含经典或复古术语的产品,可以使用以下查询:
SELECT productName, productLine FROM products WHERE MATCH(productline) AGAINST('Classic,Vintage') ORDER BY productName;
默认情况下,AGAINST()函数使用IN NATURAL LANGUAGE MODE搜索修饰符,因此您可以在查询中将其省略。
还有其他搜索修饰符,例如用于布尔文本搜索的``IN BOOLEAN MODE''。
您可以在查询中显式使用IN NATURAL LANGUAGE MODE搜索修饰符,如下所示:
SELECT productName, productLine FROM products WHERE MATCH(productline) AGAINST('Classic,Vintage' IN NATURAL LANGUAGE MODE)
默认情况下,MySQL以不区分大小写的方式执行搜索。
但是,您可以指示MySQL使用二进制排序规则对索引列执行区分大小写的搜索。
按相关性对结果集进行排序
全文搜索的一个非常重要的功能是MySQL如何根据它们的相关性对结果集中的行进行排名。
在WHERE子句中使用MATCH()函数时,MySQL首先返回最相关的行。
下面的示例向您展示MySQL如何根据相关性对结果集进行排序。
首先,为products表的productName列创建全文搜索。
ALTER TABLE products ADD FULLTEXT(productName);
其次,搜索名称包含Ford和/或1932的产品:
SELECT productName, productLine FROM products WHERE MATCH(productName) AGAINST('1932,Ford');
这是输出:
首先返回名称同时包含1932和Ford的产品,然后返回名称包含唯一的Ford关键字的产品。
使用全文搜索时,您应该记住一些重要事项:
MySQL全文搜索引擎中定义的搜索词的最小长度为4。
这意味着,如果您搜索长度小于4的关键字(例如car,cat),则不会获得任何结果。停止词(Stop words)将被忽略。
MySQL在MySQL源代码发行版storage / myisam / ft_static.c中定义了停止词列表
在本教程中,您向您展示了如何使用MATCH()和AGAINST()函数在MySQL中执行自然语言搜索。