回答
在我看来,最大的缺点是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全文搜索作为level2索引
- 3. MySQL全文索引搜索短话
- 4. MySQL全文索引搜索相关
- 5. Mysql全文索引搜索问题
- 6. MySql中的全文搜索索引?
- 7. mysql的全文检索与多个全文索引
- 8. MySQL全文索引和常规索引搜索
- 9. mongoDB索引限制
- 10. 全文索引
- 11. 如何查看MySql全文索引?
- 12. MySQL全文索引找不到指数
- 13. 全文搜索MySQL
- 14. MySql全文搜索
- 15. mysql全文搜索
- 16. 全文搜索MYSQL
- 17. mysql全文搜索
- 18. MySQL全文搜索?
- 19. MySql的全索引搜索不工作
- 20. Cancan nested_routes限制访问权限:索引
- 21. MySQL文本索引
- 22. 文本搜索Mysql索引
- 23. Mysql全文索引搜索返回奇怪的结果
- 24. MySQL的 - 全文索引搜索问题在我的数据库
- 25. 如何从PHP中检索MySql全文索引信息?
- 26. MYSQL全文索引搜索,无法让我的头圆它
- 27. 试图强制索引MYsql
- 28. MySQL十进制索引号
- 29. 使用MySQL索引纯文本文件。使用MySQL的全文索引或增加你自己的?
- 30. 全文搜索查询mysql
您可以通过创建一个从属机器来解决此问题。从机上的表格类型不必与主机匹配,这意味着您的innodb主机可以拥有一个全文搜索的myisam从机。 http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-diffengines.html – txyoji 2009-09-17 23:00:28