自然语言全文搜索
在本教程中,您将通过使用MATCH()和AGAINST()函数来了解MySQL自然语言全文搜索。
MySQL自然语言全文搜索简介
在自然语言全文搜索中,MySQL查找与自由文本自然人类语言查询相关的行或文档,例如“如何使用MySQL自然语言全文搜索”。
相关性是一个正浮点数。 当相关性为零时,这意味着没有相似性。MySQL根据各种因素计算相关性,包括文档中的字数,文档中的唯一字数,集合中的单词总数以及包含特定单词的文档数(行)。
要执行自然语言全文搜索,您可以使用MATCH()和AGAINST()函数。 MATCH()函数指定要搜索的列,AGAINST()函数确定要使用的搜索表达式。
MySQL自然语言全文搜索示例
我们将使用示例数据库(yiibaidb)中的products表进行演示。
mysql> desc products;
+--------------------+---------------+------+-----+---------+------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------+------------------+
| productCode | varchar(15) | NO | PRI | | |
| productName | varchar(70) | NO | | NULL | |
| productLine | varchar(50) | NO | MUL | NULL | |
| productScale | varchar(10) | NO | | NULL | |
| productVendor | varchar(50) | NO | | NULL | |
| productDescription | text | NO | | NULL | |
| quantityInStock | smallint(6) | NO | | NULL | |
| buyPrice | decimal(10,2) | NO | | NULL | |
| MSRP | decimal(10,2) | NO | | NULL | |
| stockValue | double | YES | | NULL | STORED GENERATED |
+--------------------+---------------+------+-----+---------+------------------+
10 rows in set (0.22 sec)首先,需要使用ALTER TABLE ADD FULLTEXT语句在products表的productLine列中启用全文搜索:
其次,可以搜索产品系列包含Classic的产品,使用MATCH()和AGAINST()函数,如下查询:
执行上面查询语句,得到以下结果 -
AGAINST()函数默认使用IN NATURAL LANGUAGE MODE搜索修饰符,因此您可以在查询中省略它。还有其他搜索修饰符,例如IN BOOLEAN MODE用于布尔文本搜索。
可以在查询中显式使用IN NATURAL LANGUAGE MODE搜索修饰符,如下所示:
执行上面查询语句,得到以下结果 -
默认情况下,MySQL以不区分大小写的方式执行搜索。但是,您可以指示MySQL使用二进制排序规则对索引列进行区分大小写搜索。
按相关性排序结果集
全文搜索的一个非常重要的特征是MySQL根据其相关性对结果集中的行进行排序。 当WHERE子句中使用MATCH()函数时,MySQL返回首先更相关的行。
以下示例显示了MySQL如何根据相关性对结果集进行排序。
首先,可以为products表的productName列启用全文搜索功能。
其次,使用以下查询搜索名称包Ford和/或1932的产品:
我们来查看输出结果:
首先返回其名称包含1932和Ford的产品,然后返回名称包含唯一Ford关键字的产品。
使用全文搜索时,应该记住一些重点:
MySQL全文搜索引擎中定义的搜索项的最小长度为
4,这意味着如果搜索长度小于4的关键字,例如car,cat等,则不会得到任何结果。停止词被忽略,MySQL定义了MySQL源代码分发
storage/myisam/ft_static.c中的停止词列表。
在本教程中,向您展示了如何使用MATCH()和AGAINST()函数在MySQL中执行自然语言搜索。
Last updated
Was this helpful?