回答
在我看来,最大的缺点是MySQL全文索引仅限于MyISAM表。与InnoDB表格相反,这些表格缺少很多重要的功能,例如交易。
对于大型表格,您需要在MySQL配置文件中增加缓冲区大小和缓存限制。
此外,您在搜索中使用的MATCH()列需要与索引中的列相同。
它不可能是没有问题...
这当然不是!
任何纯粹由被阻止的单词组成的搜索词都会默默地失败。由于最小/最大长度限制和/或停用词文件,可能会阻止单词。
我发现默认的停用词文件过于激进,它阻止了许多有效的搜索。此外,默认的最小长度为4的游戏经常会出现人们可能想要搜索的缩略词。我将ft_min_word_len减少到3并完全删除了停止列表(ft_stopword_file ='')。 Doc:http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html
您也可以检查搜索查询以查看它是否仅包含< 4个字母的单词,并且在这种情况下回退到LIKE搜索。没有这样简单的方法来在应用程序级别避开停止列表。
'单词字符'的选择可能无法满足您的需求,而且更改很棘手。例如,搜索“Terry”不符合“Terry's”。一般来说,不支持任何形式的词干,所以“饼干”也不会与“饼干”相匹配。
最后,正如cg提到的,InnoDB不支持。在这个时代,你不希望把所有的数据放在MyISAM表中。
如果您有足够的存储空间,您可以将主要规范版本的数据放在InnoDB表中,然后创建一个单独的MyISAM表,其中包含纯文本内容的副本,纯粹用于作为searchbait。您必须更新这两个表上的更改,但是如果MyISAM表失去完整性,那么至少您只能失去搜索相关行的能力,而不是暴露实际的实时数据并获取应用程序错误。
然后,如果您有空闲的周期,可以在searchbait上实现自己的文本处理并查询单词以解决上述某些限制。例如,您可以转义想要成为单词字符的字符,删除不想成为单词字符的字符,并执行简单的手动英语词干。
除了bobince的很好的回答,还有一篇关于全文限制的MySQL文档。希望这可以帮助。 http://dev.mysql.com/doc/refman/5.0/en/fulltext-restrictions.html(Olafur Waage谈到了其中之一)
- 1. 全文索引 - mysql
- 2. mysql全文索引
- 3. MySQL的全文索引
- 4. 全文搜索索引的大小会受到限制吗?
- 5. mysql全文搜索作为level2索引
- 6. MySql中的全文搜索索引?
- 7. MySQL全文索引搜索短话
- 8. Mysql全文索引搜索问题
- 9. MySQL全文索引搜索相关
- 10. mysql的全文检索与多个全文索引
- 11. MySQL全文索引和常规索引搜索
- 12. mongoDB索引限制
- 13. 全文索引
- 14. 全文索引
- 15. 的MongoDB - 全文索引 - 全文检索 - 制止
- 16. 如何查看MySql全文索引?
- 17. 具有全文索引的mysql视图
- 18. MySQL全文索引不带通配符
- 19. MySQL全文索引的查询返回错误,创建索引
- 20. 索引文件大小限制
- 21. 全文搜索MYSQL
- 22. 全文搜索MySQL
- 23. mysql全文搜索
- 24. MySQL全文搜索?
- 25. MySql全文搜索
- 26. 全文搜索MySQL
- 27. MySQL - 全文搜索
- 28. mysql全文搜索
- 29. MySql的全索引搜索不工作
- 30. 全文索引vs %%和聚簇索引
您可以通过创建一个从属机器来解决此问题。从机上的表格类型不必与主机匹配,这意味着您的innodb主机可以拥有一个全文搜索的myisam从机。 http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-diffengines.html – txyoji 2009-09-17 23:00:28