我的搜索在我的全文搜索中包含单词“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=3
和innodb_ft_min_token_size=3
我正在使用innodb。并且返回27000个结果,并且'the'从大约500,000条记录的db中返回17000,所以即使这样,我也没有达到50%标记,我正在使用布尔模式。我找不到另一个打破这个的词。有什么想法吗?
答案 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”。