gpt4 book ai didi

MySQL 全文按字母/数字拆分

转载 作者:行者123 更新时间:2023-11-30 23:49:57 24 4
gpt4 key购买 nike

我有一张产品表,例如汽车。我希望用户能够使用多个术语进行搜索,例如用于自动完成。 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) ')

不会,因为必须在单词的开头进行搜索。

用户可能知道数字,但可能忘记字母。我希望第二个查询匹配。

如果产品是:“Lexus RX 450 H”,则上次查询匹配,问题解决。

我可以做的是在表格中创建第二列,并通过在它们之间放置一个空格来拆分所有字母/数字,例如使用正则表达式。然后,应该在该列上进行搜索,瞧,问题解决了。

但是,(大)表将变得几乎两倍大,我想知道是否可以告诉 MySQL 执行所描述的索引,而不创建额外的列。

最佳答案

看起来查询正在按预期返回行。

MATCH (productname) AGAINST ('+lex* +450*' IN BOOLEAN MODE) ')

本质上是匹配以“lex”开头且“450”开头的文本。您的数据与“lex”匹配,但与“450”不匹配。删除“+405”上的星号,我相信这对您有用。

MATCH (productname) AGAINST ('+lex* +450' IN BOOLEAN MODE) ')

应返回“Lexus RX 450 H”和“Lexus RX450H”。

关于MySQL 全文按字母/数字拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com