为什么MATCH AGAINST返回的结果与LIKE不同?

时间:2013-09-25 13:10:05

标签: mysql sql search full-text-search sql-like

我正在比较像

这样的查询结果
SELECT * FROM object_search
WHERE
    keywords LIKE '%,woman,%'
AND keywords LIKE '%,man,%'

SELECT * FROM object_search
WHERE
    MATCH (keywords) AGAINST ('+(",woman,") +(",man,")')

我本来期望得到完全相同的结果,但是第一个查询吐出大约300个结果,第二个查询接近3000个结果。

两者之间的区别是什么?如何使用全文功能获得相同的结果?

1 个答案:

答案 0 :(得分:1)

+运算符用于搜索IN BOOLEAN MODE。我认为它将在NATURAL LANGUAGE MODE(默认)中被忽略。

尝试:

SELECT * FROM object_search
WHERE MATCH (keywords)
    AGAINST ('+woman +man' IN BOOLEAN MODE); -- could return rows containing both "man" and "woman" (ignoring ft_min_word_len, see below)

此外,全文索引仅涵盖单词。标点符号(例如,)将始终被忽略。你不能“全文搜索”非字母数字字符。

最后,默认情况下,将忽略短于4个字符的单词。因此,默认情况下,“man”未编入索引。可以通过ft_min_word_len配置选项更改此限制。

另外,请注意stopwords(从未编入索引的常用词)。