我正在比较像
这样的查询结果SELECT * FROM object_search
WHERE
keywords LIKE '%,woman,%'
AND keywords LIKE '%,man,%'
到
SELECT * FROM object_search
WHERE
MATCH (keywords) AGAINST ('+(",woman,") +(",man,")')
我本来期望得到完全相同的结果,但是第一个查询吐出大约300个结果,第二个查询接近3000个结果。
两者之间的区别是什么?如何使用全文功能获得相同的结果?
答案 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(从未编入索引的常用词)。