2015-10-29 77 views
0

当我的搜索在我的全文搜索中包含单词“the”时,我遇到问题。MySQL 5.6全文搜索当在PHP中搜索单词“the”时出现问题

这里是一个问题我的搜索代码:

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

这一个正常工作:

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

我已经关闭停止词在我的CNF文件,改变了最小字母3同时使用ft_min_word_len=3innodb_ft_min_token_size=3

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

回答

0

建立一个不同的停用词表。从中删除“the”和“and”。

+0

感谢您的回复。我已经在my.cnf中有ft_stopword_file =“”并重新启动服务器。我已经安装好几个月了,并已确认它已正确设置。正如我在我的文章中所说的,'and'这个词有效,我只是对'the'这个词感到困惑...... – DanMan

0

好吧,我终于明白了这一点。它看起来像我已经myisam停用词清除,但不是innodb的。这是一个小,但难度比对于MyISAM做的,但这里有其他人的步骤,可能需要它:

在你的/etc/my.cnf(或my.ini文件在Windows上)加上这些行:

创建一个停用词表。我在一个名为settings的db和一个名为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`);