我有一张产品表,例如汽车。我希望用户能够使用多个字词进行搜索,例如自动补全。 LIKE%term%是减慢速度的方法,因为它的桌子很大。为了使其更快,我想使用MySQL的全文本搜索。我使用ft_min_word_lenght = 1。
假设产品名称为“ Lexus RX450H”。然后两个词被索引:“雷克萨斯”和“ RX450H”。
MATCH (productname) AGAINST ('+lex* +rx45*' IN BOOLEAN MODE) ')
..将匹配该产品,很好。
但
MATCH (productname) AGAINST ('+lex* +450*' IN BOOLEAN MODE) ')
不会,因为必须搜索单词的开头。
用户可能知道数字,但可能会忘记字母。我希望第二个查询匹配。
如果产品是:
“雷克萨斯RX 450 H”,那么最后一个查询将匹配,问题解决了。
我所能做的就是在表格中创建第二列,并通过在它们之间放置一个空格来拆分所有字母/数字,例如使用正则表达式。然后,应该在已解决问题的专栏中进行搜索。
但是,(大)表将变成几乎两倍大,我想知道是否可以告诉MySQL执行如上所述的索引,而无需创建额外的列。
最佳答案
看起来查询正在返回应有的行。
匹配(产品名称)反对('+ lex * + 450 *'在BOOLEAN模式下')
本质上说,匹配文本以“ lex”开头并以“ 450”开头。您的数据匹配“ lex”,但不匹配“ 450”。删除“ +405”上的星号,我相信这对您有用。
匹配(产品名称)反对('+ lex * +450'在BOOLEAN模式下')
应该返回“ Lexus RX 450 H”和“ Lexus RX450H”。