[英]MySQL Full-text search - search for short words
我有个问题。 我做了一个简单的搜索引擎,可以按汽车的品牌和型号进行搜索。 由于查询性能和数据库中数据很多的原因,我决定使用全文搜索。 可以,但是现在我遇到了问题:
我想找到所有品牌“ Audi”和型号“ Q7”的汽车。 现在,我有这个SQL查询,但是由于字长“ Q7”,它无法正常工作:
SELECT `a`.`id`, `a`.`title`, `a`.`askprice`, `a`.`description`, `a`.`picture`
FROM (`mm_ads` as a)
WHERE `a`.`category` = '227'
AND `a`.`askprice` >= '0'
AND `a`.`askprice` <= '144000'
AND (MATCH(a.title) AGAINST ('+audi +q7' IN BOOLEAN MODE ))
GROUP BY `a`.`id`
ORDER BY `a`.`id` ASC
LIMIT 30
我无权修改MySQL配置文件,无法将ft_min_word_len
设置为值2。现在,值是3。还有其他方法可以解决吗?
这是另一个问题:
我想获得所有品牌的宝马汽车和型号116的汽车。 例如,我有一辆名为BMW, 1, 116i
的汽车。 我的SQL查询是:
`SELECT `a`.`id`, `a`.`title`, `a`.`askprice`, `a`.`description`, `a`.`picture`
FROM (`mm_ads` as a)
WHERE `a`.`category` = '227'
AND `a`.`askprice` >= '0'
AND `a`.`askprice` <= '144000'
AND (MATCH(a.title) AGAINST ('+bmw +116' IN BOOLEAN MODE))
GROUP BY `a`.`id`
ORDER BY `a`.`id` ASC
LIMIT 30`
搜索返回0行。 为什么? 所有输入字符串(“ BMW”,“ 116”)的最小长度为3。我在做什么错?
问候,马里奥
在处理与匹配时(关于文本长度),我遇到了类似的问题,我的答案是先将字符串加长,然后在喜欢和匹配之间切换以缩短单词。 不是我所说的优雅,但这是我所能做的,因为我也无法访问该配置。
至于第二个问题,您确定默认值不是4吗? 我记得我无法搜索“艺术”一词。 3个字母。 必须与4个字符以下的所有内容一起使用。
尝试这个:
搜索结果:“ bmw 116i”
(反对(MATCH(a.title)('+ bmw + 116i“ bmw 116i”'在布尔模式下))
不是最好的解决方案,但可能会有所帮助...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.