我有一张产品表,例如汽车。我希望用户能够使用多个术语进行搜索,例如自动完成。LIKE %term% 会变慢,因为它是一个巨大的表。为了让它更快,我想使用 MySQL 的全文搜索。我使用 ft_min_word_lenght = 1。
想象一下产品名称是“Lexus RX450H”。然后索引两个词:“Lexus”和“RX450H”。
MATCH (productname) AGAINST ('+lex* +rx45*' IN BOOLEAN MODE) ')
..会匹配这个产品,好。
但
MATCH (productname) AGAINST ('+lex* +450*' IN BOOLEAN MODE) ')
不会,因为必须搜索单词的开头。
用户可能知道数字,但可能会忘记字母。我希望第二个查询匹配。
如果产品是:“Lexus RX 450 H”,那么最后一个查询将匹配,问题已解决。
我可以做的是在表中创建第二列,并通过在它们之间放置一个空格来拆分所有字母/数字,例如使用正则表达式。然后,应该在此列上进行搜索,瞧,问题解决了。
但是,(大)表将变得几乎两倍大,我想知道是否可以告诉 MySQL 执行所描述的索引,而无需创建额外的列。