12.9.3 具有查询扩展功能的全文本搜索

全文搜索支持查询扩展(尤其是其变体“盲查询扩展”)。当搜索短语太短时,这通常很有用,这通常意味着用户依赖于全文搜索引擎缺乏的隐含知识。例如,搜索“数据库”的用户实际上可能意味着“ MySQL”,“ Oracle”,“ DB2”和“ RDBMS”都是应与“数据库”匹配且也应返回的短语。这就是隐含的知识。

通过在搜索词组后面添加WITH QUERY EXPANSIONIN 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 will 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)

另一个示例是当用户不确定如何拼写“ Maigret”时,搜索 Georges Simenon 的有关 Maigret 的书。在搜索“ Megre 和不情愿的证人”时,仅找到“ Maigret 和不情愿的证人”,而没有查询扩展。带有查询扩展的搜索将在第二遍查找所有带有单词“ Maigret”的书籍。

Note

由于盲查询扩展往往会通过返回不相关的文档而显着增加噪声,因此仅在搜索短语较短时才使用它。