mysql全文布尔搜索运算符无效

mysql全文布尔搜索运算符无效,mysql,Mysql,为什么使用针对语句的多个匹配,+运算符将不再执行该任务? 我现在得到的结果包括或ziekenhuis,或bed,或hospital 我想要(齐肯豪斯和床)或(医院和床) 谢谢大家! SELECT * FROM archief WHERE MATCH(description, keywords) AGAINST('+ziekenhuis +bed' IN BOOLEAN MODE) OR MATCH(description, keywords) AGAINST('+ziekenhuis +be

为什么使用针对语句的多个匹配,+运算符将不再执行该任务? 我现在得到的结果包括或ziekenhuis,或bed,或hospital

我想要(齐肯豪斯和床或(医院和床

谢谢大家!

SELECT * FROM archief WHERE MATCH(description, keywords) 
AGAINST('+ziekenhuis +bed' IN BOOLEAN MODE) 
OR MATCH(description, keywords) AGAINST('+ziekenhuis +bed' IN BOOLEAN MODE) 
OR MATCH(description, keywords) AGAINST('+hospital +bed' IN BOOLEAN MODE) 
OR MATCH(description, keywords) AGAINST('+lit +d\'hôpital' IN BOOLEAN MODE)

AND showa = '1' 
AND rel_date <= '20110630' 
ORDER BY datetaken desc LIMIT 50
从匹配的archief中选择*(描述、关键字)
反对(“+ziekenhuis+bed”在布尔模式下)
或将(描述、关键字)与(“+ziekenhuis+bed”以布尔模式匹配)
或匹配(描述、关键字)(布尔模式下的“+医院+床”)
或匹配(描述、关键字)(布尔模式下的“+lit+d'hôpital”)
showa='1'

如果使用默认设置ft_min_word_len为4,则查询中的3个字母单词可能会被忽略

您可以这样检查设置:

show variables like 'ft_min_word_len';
如果您想要索引3个字母单词,则需要更改配置文件中的设置并重新启动MySQL。例如,打开/etc/my.cnf文件并在[mysqld]部分添加/更新此行:

ft_min_word_len = 3
然后重新启动MySQL服务器,使更改生效。如果你想让简短的单词被索引,你也应该考虑设置这个值。您应该查看MySQL默认列表,看看是否需要对这些单词进行索引。您可以忽略“停止字”列表,将所有“我的字”编入索引,并将其添加到my.cnf文件的[mysqld]部分:

ft_stopword_file = ''
此外,您不需要使用多个匹配语句,您可以在匹配字符串的布尔逻辑中完成所有操作

更新服务器后,请尝试以下操作:

SELECT * 
FROM archief 
WHERE 
MATCH(description, keywords) 
  AGAINST('(+ziekenhuis +bed) (+hospital +bed) (+lit +d\'hôpital)' IN BOOLEAN MODE) 
AND showa = '1' 
AND rel_date <= '20110630' 
ORDER BY datetaken desc 
LIMIT 50
选择*
来自archief
哪里
匹配(描述、关键字)
反对(“(+ziekenhuis+床)(+hospital+床)(+lit+d'hôpital)”的布尔模式)
showa='1'

rel_date这听起来很合乎逻辑,但结果之间没有区别,无论是否有括号,都会给出至少包含两个单词中一个的记录。如果使用默认的ft_min_word_len 4,可能是3个字母的单词没有被索引的问题。我将编辑我的答案。在这种情况下,请检查您的停止词列表和/或在我的答案中尝试更新的查询。