Mysql 为什么“匹配对”返回的结果与“喜欢”不同?

Mysql 为什么“匹配对”返回的结果与“喜欢”不同?,mysql,sql,search,full-text-search,sql-like,Mysql,Sql,Search,Full Text Search,Sql Like,我正在比较一个查询的结果,如 SELECT * FROM object_search WHERE keywords LIKE '%,woman,%' AND keywords LIKE '%,man,%' 到 我本希望得到完全相同的结果,但第一个查询给出了大约300个结果,第二个查询接近3000个 两者之间的区别是什么?如何使用全文功能获得相同的结果?在搜索中使用+运算符。我认为它将在自然语言模式下被忽略(默认) 尝试: 此外,全文索引将只包含单词。标点符号(如,)将始终被忽略。不能“

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

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

我本希望得到完全相同的结果,但第一个查询给出了大约300个结果,第二个查询接近3000个


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

在搜索中使用
+
运算符。我认为它将在自然语言模式下被忽略(默认)

尝试:

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

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


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

能否提供表的结构?还有一些在第2种情况下返回的行,但如果是1-st.@AlmaDoMundo,则返回的行似乎与查询的匹配只需要两个关键字中的一个出现在一行中。这也是一个InnoDB表。我猜这是关于你的
女人
男人
的词,因为
男人
女人
的子词(但它似乎不应该这样工作)。尝试类似于
foo
bar
的方法-即非-intersective@AlmaDoMundo与
car
house
@Cobra\u一样快如果可能的话,重新考虑您的表结构。将分隔的值(即非标量数据)存储在单个字段中是不好的做法。如果可以的话。
SELECT * FROM object_search
WHERE
    MATCH (keywords) AGAINST ('+(",woman,") +(",man,")')
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)