2

我正在比较查询的结果,例如

SELECT * FROM object_search
WHERE
    keywords LIKE '%,woman,%'
AND keywords LIKE '%,man,%'

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

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

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

4

1 回答 1

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配置选项更改此限制。

另外,请注意停用词(从未被索引的常用词)。

于 2013-09-25T13:55:20.513 回答