有什么限制或陷阱或反模式或陷阱?
它看起来很有吸引力,显然你可以创建一个几乎没有工作的搜索引擎.但它不能没有它的问题......
你有什么经历?
它不能没有它的问题......
当然不是!
任何纯粹由被阻止的单词组成的搜索词都将无声地失败.由于最小/最大长度限制和/或停用词文件,可以阻止单词.
我发现默认的停用词文件过于激进,它阻止了许多有效的搜索.对于人们可能想要搜索的首字母缩略词,默认的最小长度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"不匹配.一般来说,不支持任何类型的干酪,因此"饼干"也不会与"饼干"相匹配.
最后,正如cg所提到的,没有对InnoDB的支持.在这个时代,您不希望将所有数据放在MyISAM表中.
如果您有备用存储空间,您可以做的是将数据的主要规范版本放在InnoDB表中,然后创建一个单独的MyISAM表,其中包含freetext内容的副本,纯粹用作searchbait.您必须在更改时更新两个表,但如果MyISAM表失去完整性,那么至少您将无法搜索相关行,而不是弄乱真实的实时数据并获得应用程序错误.
然后,如果你有自己的周期,你可以在searchbait和查询单词上实现自己的文本处理,以解决上述一些限制.例如,您可以转义您想要成为单词字符的字符,删除您不想成为单词字符的字符,以及执行简单的手动英语词干.