问题描述
我有一个MySQL 5.7.31
InnoDB表,该表启用了全文索引...
如果我搜索更长的单词,我会得到结果:
SELECT * FROM my_table WHERE match(my_title) against('landscape in' IN BOOLEAN MODE)
如果我在全文中搜索短词(例如in
),则没有结果
SELECT * FROM my_table WHERE match(my_title) against('in' IN BOOLEAN MODE)
数据在那里,我可以通过like %%
查询来找到它:
SELECT * FROM my_table WHERE my_title LIKE '%in%'
我在/etc/my.cnf中设置了这两个,我知道一个用于InnoDB,一个用于MyIsam,我重新启动了MySQL,但仍然无法运行上述简短的全文查询。
ft_min_word_len=1
innodb_ft_min_token_size=1
编辑:
如果我有一个类似landscape in Paris
的值,那么我会得到against('+landscape +Paris' IN BOOLEAN MODE)
的数据,而不是against('+landscape +in +Paris' IN BOOLEAN MODE)
in
可能是保留字吗?
解决方法
“中”可能在“停止列表”中。更改非索引字表文件的规范。
更改最小长度或非索引字表后,必须重建全文索引。 (不需要重新启动MySQL。)
我在一种情况下使用的替代方法:我在长词中添加了+
。例如,against('+landscape in +Paris' IN BOOLEAN MODE)
可能会实现您的目标而无需更改min-len或停用词列表。
(是的,MyISAM和InnoDB之间存在多个“差异”。我在文档中没有找到明确的列表。这是我尝试的这样的列表:http://mysql.rjweb.org/doc.php/myisam2innodb#fulltext)