前言
最近在学习和了解 MySQL 8 自带的全文搜索功能。自己在看资料的时候顺便翻译了一下,希望对大家有用。(章节序号可能有所差异,因为官方文档会不定期更新)
官方原文链接如下:《Full-Text Searches with Query Expansion》
全文搜索支持查询扩展(特别是其变体“隐含查询扩展”)。当搜索短语太短时,这通常很有用,这通常意味着用户依赖于全文搜索引擎所缺乏的隐含知识。例如,用户搜索“database”可能实际上意味着“MySQL”、“Oracle”、“DB2”和“RDBMS”都是应该与“databases”匹配的短语,也应该返回。这是隐含的知识。
隐含查询扩展(也称为自动相关性反馈)是通过在搜索短语后添加 WITH QUERY EXPANSION 或 IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 来启用的。 它的工作原理是执行两次搜索,其中第二次搜索的搜索短语是与第一次搜索中几个最相关的文档连接的原始搜索短语。因此,如果其中一个文档包含单词“databases”和单词“MySQL”,则第二次搜索将查找包含单词“MySQL”的文档,即使它们不包含单词“database”。 以下示例显示了此差异:
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)另一个例子是搜索 Georges Simenon 关于 Maigret 的书籍,当用户不确定如何拼写“Maigret”时。搜索“Megre and the reluctant witnesses”,只能找到“Maigret and the Reluctant Witnesses”,而没有查询扩展。使用查询扩展的搜索将查找第二遍中带有“Maigret”一词的所有书籍。
Note
由于隐含查询扩展往往会通过返回不相关的文档而显著增加干扰,因此仅当搜索短语较短时才使用它。