我们有一个使用 MySQL 全文搜索的网站,但存在一个问题,即需要索引的许多字符串长度为 3 个字符。我知道 MySQL 的默认设置不是索引此长度的字符串,但我也知道可以在 my.cnf 中覆盖它。我认为限制的原因主要是基于性能,所以我不确定这是否是我们应该考虑改变的?我们在这里有什么选择?此服务器上有许多站点,因此任何性能下降都可能导致许多站点出现问题。
mysql版本:5
我们有一个使用 MySQL 全文搜索的网站,但存在一个问题,即需要索引的许多字符串长度为 3 个字符。我知道 MySQL 的默认设置不是索引此长度的字符串,但我也知道可以在 my.cnf 中覆盖它。我认为限制的原因主要是基于性能,所以我不确定这是否是我们应该考虑改变的?我们在这里有什么选择?此服务器上有许多站点,因此任何性能下降都可能导致许多站点出现问题。
mysql版本:5
原因是基于性能的,是的。降低默认限制将增加存储索引所需的空间,并且增加的索引大小需要更长的搜索时间。影响将取决于使用情况(执行的查询类型)和当前数据集的大小。默认最小值为 4,您可以像这样降低它:
当你重建你的索引(你必须)时,一定不要修复,而是删除并重建索引。这比修复它们要快得多。
最好的解决方案可能是在索引长度更改之前和之后监视开发服务器上的索引大小。
最好的选择(我已经推迟)是忽略 MySQL 全文匹配(它有严重的限制,包括仅 MyISAM、无法匹配前缀通配符、禁止的默认停用词列表)并实施第三方解决方案。可用的最佳选择是:
我个人会选择 Lucene,尽管它需要一个本地 java 实例。如果这是不可能的,Sphinx 很容易为 PHP(在这里演练)和许多其他语言配置。
这里有一些很好的基准和其他人对此事的第一印象。
作为安迪答案的替代方案,您可以在短单词的末尾添加一个虚拟字符以人为地增加其长度,而不是更改全局设置。
例如,对于单词“at”,您可以将其替换为“at--”(长度为 4),对于单词“see”,您可以将其替换为“see-”(长度也是 4)。
您可以派生这样的列并为其编制索引,但返回原始数据。