MySQL 8.4 发行说明
全文搜索支持查询扩展(特别是其变体““盲查询扩展”)。当搜索短语太短时,这通常很有用,因为这通常意味着用户依赖于全文搜索引擎缺乏的隐含知识。例如,搜索““数据库””的用户实际上可能意味着““MySQL””、““Oracle””、““DB2””和““RDBMS””都是应该匹配““数据库””并且也应该返回的短语。这是隐含知识。
通过在搜索短语后面添加WITH QUERY EXPANSION
或IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
,可以启用盲查询扩展(也称为自动相关性反馈)。它的工作原理是执行两次搜索,其中第二次搜索的搜索短语是原始搜索短语与第一次搜索中几个最相关的文档连接在一起。因此,如果其中一个文档包含单词““数据库””和单词““MySQL””,则即使不包含单词““数据库””,第二次搜索也会找到包含单词““MySQL””的文档。以下示例说明了这种差异
mysql> SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ('database' IN NATURAL LANGUAGE MODE);
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ('database' WITH QUERY EXPANSION);
+----+-----------------------+------------------------------------------+
| id | title | body |
+----+-----------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
| 3 | Optimizing MySQL | In this tutorial we show ... |
| 6 | MySQL Security | When configured properly, MySQL ... |
| 2 | How To Use MySQL Well | After you went through a ... |
| 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
+----+-----------------------+------------------------------------------+
6 rows in set (0.00 sec)
另一个例子可能是搜索乔治·西默农关于梅格雷的书籍,而用户不确定如何拼写““梅格雷””。搜索““Megre and the reluctant witnesses””只能找到““Maigret and the Reluctant Witnesses””,而没有进行查询扩展。使用查询扩展进行搜索会在第二次传递时找到所有包含单词““Maigret””的书籍。
注意
由于盲查询扩展往往会通过返回不相关的文档来显著增加噪音,因此仅当搜索短语很短时才使用它。