MySQL全文搜索:查询扩展模式
全文搜索的查询扩展模式将进行两个阶段的搜索。第一遍搜索和普通的自然语言搜索一样,在这次搜索里找到的相关程度最高的数据行里的单词将被用在第二阶段。这些数据行里的单词加上原来那些搜索单词将被用来进行第二遍搜索。因为搜索单词的集合变大了,所以在最终结果里往往会多出一些在第一阶段没被找到、但与第一阶段的检索结果有一定关系的数据行。
要想进行这种搜索,需要在搜索字符串的后面加上WITH QUERY EXPANSION短语。下面的例子提供了一个演示。第一条查询命令将进行一次自然语言搜索。第二条查询命令将进行一次查询扩展搜索,这次多找到了一个数据行,但该数据行不包含原始搜索字符串里的任何单词。该数据行会被匹配出来的原因是它包含单词"candle",这个单词出现在了被自然语言搜索找到的某个数据行里。
-
mysql> SELECT * FROM apothegm
-
-> WHERE MATCH(attribution, phrase)
-
-> AGAINST('bell book');
-
+-----------------------+------------------------------------+
-
| attribution | phrase |
-
+-----------------------+------------------------------------+
-
| Miguel de Cervantes | Bell, book, and candle |
-
| Alexander Graham Bell | Mr. Watson, come here. I want you! |
-
+-----------------------+------------------------------------+
-
mysql> SELECT * FROM apothegm
-
-> WHERE MATCH(attribution, phrase)
-
-> AGAINST('bell book' WITH QUERY EXPANSION);
-
+-----------------------+---------------------------------------+
-
| attribution | phrase |
-
+-----------------------+---------------------------------------+
-
| Miguel de Cervantes | Bell, book, and candle |
-
| Alexander Graham Bell | Mr. Watson, come here. I want you! |
-
| Robert Burton | I light my candle from their torches. |
-
+-----------------------+---------------------------------------+