MySQL 5.6全文搜索在PHP中搜索单词“the”时出现问题

时间:2015-10-29 17:17:40

标签: mysql full-text-search innodb

我的搜索在我的全文搜索中包含单词“the”时出现问题。

这是我的问题搜索代码:

SELECT * FROM names WHERE MATCH(myname) AGAINST ('+the' IN BOOLEAN MODE)

这个很好用:

SELECT * FROM names WHERE MATCH(myname) AGAINST ('+and' IN BOOLEAN MODE)

我已经关闭了CNF文件中的停用词,使用ft_min_word_len=3innodb_ft_min_token_size=3

将最小字母更改为3

我正在使用innodb。并且返回27000个结果,并且'the'从大约500,000条记录的db中返回17000,所以即使这样,我也没有达到50%标记,我正在使用布尔模式。我找不到另一个打破这个的词。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

好的,我终于搞清楚了。看起来我已经清除了myisam停用词但不是innodb。它比myisam更难但更难做,但这里是其他任何可能需要它的步骤:

在/etc/my.cnf(或Windows上的my.ini)中添加以下行:

创建一个停用词表。我在一个名为settings的数据库和一个名为innodb-stopwords的表中创建了我的数据库。您不能只设置innodb_ft_enable_stopword = 0,您必须创建并链接到表格。

确保您的表是innodb并添加一个名为value,varchar(?),utf8_general_ci的列。您可以将其留空或向表中添加值。

innodb_ft_enable_stopword = 1  
innodb_ft_server_stopword_table = settings/innodb-stopwords

重启你的mysql服务器。

删除并重新创建全文索引。

如果您不想重新启动服务器,可以使用动态设置变量(同时更新cnf / ini文件以重新启动服务器)

--innodb_ft_enable_stopword=1
--innodb_ft_server_stopword_table=db_name/table_name

我没有看到重新创建索引的任何解决方法......您可以在一个命令中执行此操作,因此该表一直处于锁定状态,您的用户不会收到错误:

ALTER TABLE `tablename` DROP INDEX indexname, ADD FULLTEXT(`columnname`);

答案 1 :(得分:1)

构建不同的停用词列表。从中删除“the”和“and”。