我们有一个使用MySQL全文search的网站,但有一个问题,需要索引的string数量是3个字符。 我知道MySQL的默认值不是索引这个长度的string,但是我也知道可以在my.cnf中覆盖这个。 我假设限制的原因主要是基于性能的,所以我不确定这是我们应该考虑改变的事情吗? 我们在这里有什么select? 该服务器上有许多站点,因此任何性能降级都可能会导致许多站点出现问题。
mysql版本:5
原因是基于性能的,是的。 降低默认限制将增加存储索引所需的空间,并且增加的索引大小需要更长的时间进行search。 影响将取决于使用情况(执行查询的types)和当前数据集的大小。 默认的最小值是4,你可以像这样降低它:
[mysqld] ft_min_word_len=3
当你重build你的索引时(你必须)确保不要修复,但是删除并重build索引。 这比修复它们要快得多。
mysql> ALTER TABLE tbl_name DROP INDEX ft_index; Query OK, 9999 rows affected (0.00 sec) Records: 9999 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE tbl_name CREATE INDEX ft_index( searchable_text ); Query OK, 9999 rows affected (0.00 sec) Records: 9999 Duplicates: 0 Warnings: 0
可能你最好的解决scheme是在索引长度变化之前和之后监视dev服务器上索引的大小。
最好的select(我推迟到)是忽略MySQL全文匹配(其中有严重的限制,包括MyISAM只,无法匹配前缀通配符,禁止性的默认停用词列表),并实施第三方解决scheme。 最好的select是:
我个人会selectLucene,虽然它需要一个本地的Java实例。 如果这是不可能的,狮身人面像非常容易configuration为PHP( 在这里演练 )和许多其他语言。
这里有一些很好的基准和对此事的第一印象 。
作为Andy答案的替代scheme,不是改变全局设置,而是可以在一个短字的末尾添加一个虚拟字符来人为地增加其长度。
例如,对于“at”这个词,你可以用“at–”(长度为4)代替它,单词“see”可以用“see-”代替(长度为4)。
你可以派生一个这样的列和索引,但返回原始数据。