有哪些限制或陷阱或反模式或陷阱?

看起来很有吸引力,显然你可以创建一个几乎没有工作的搜索引擎。但它不能没有它的问题......

你有什么经历?

有帮助吗?

解决方案

在我看来,最大的缺点是MySQL全文索引仅限于MyISAM表。由于对InnoDB表格不满意,这些表格缺少许多重要功能,例如:交易。

其他提示

  

它不能没有它的问题......

当然不是!

任何纯粹由被阻止的单词组成的搜索词都会无声地失败。由于最小/最大长度限制和/或禁用词文件,可以阻止单词。

我发现默认的停用词文件过于激进,它阻止了许多有效的搜索。对于人们可能想要搜索的首字母缩略词,默认的最小长度4也经常被踢。我将ft_min_word_len缩减为3并完全删除了停止列表(ft_stopword_file ='')。 Doc: http://dev.mysql.com/doc /refman/5.1/en/fulltext-fine-tuning.html

您还可以检查搜索查询以查看它是否仅包含<!> lt; 4个字母的单词,并在这种情况下回退到LIKE搜索。没有这么简单的方法可以在应用程序级别绕过停止列表。

选择<!>#8216;字符<!>#8217;可能无法满足您的需求,而且改变也很棘手。例如,搜索<!>#8220; Terry <!>#8221;将不会匹配<!>#8220;特里的<!>#8221;。一般来说,不支持任何类型的阻止,所以<!>#8220;饼干<!>#8221;不匹配<!>#8220;饼干<!>#8221;任

最后,正如cg所说,没有对InnoDB的支持。在这个时代,您不希望将所有数据都放在MyISAM表中。

如果您有备用存储空间,您可以做的是将数据的主要规范版本放在InnoDB表中,然后创建一个单独的MyISAM表,其中包含自由文本内容的副本,纯粹用作searchbait。您必须在更改时更新两个表,但如果MyISAM表失去完整性,那么至少您只能搜索相关行,而不是弄乱真实的实时数据并获得应用程序错误。

如果你有自己的周期,你可以在searchbait和查询单词上实现自己的文本处理,以解决上述一些限制。例如,您可以转义您想要成为单词字符的字符,删除您不想成为单词字符的字符,并执行简单的手动英语词干。

对于大型表,您需要在MySQL配置文件中增加缓冲区大小和缓存限制。

您在搜索中使用的MATCH()列也需要与索引中的列相同。

除了bobince非常好的答案之外,MySQL文档中还有一篇文章讨论了全文的限制。希望这可以帮助。 http://dev.mysql.com/doc/refman/5.0 /en/fulltext-restrictions.html (Olafur Waage已经谈过其中一个)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top