我有问题。我做了一个简单的搜索引擎,搜索汽车的品牌和型号。出于查询性能和数据库中的大量数据的原因,我决定使用全文搜索。没关系,但现在我遇到了问题:
我想找到所有品牌为“奥迪”和型号为“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.我做错了什么?
问候,马里奥
答案 0 :(得分:5)
在处理匹配时遇到了类似的问题(关于文本长度),我的回答是首先对字符串进行strlen,然后在like和match之间切换以获得更短的单词。不是我称之为优雅,但这是我所能做的,因为我也无法访问配置。
至于第二个问题,你确定默认值不是4吗?我记得在我的案例中我无法搜索“艺术”一词。 3个字母。不得不喜欢4个字符以下的所有内容。
答案 1 :(得分:2)
答案 2 :(得分:1)
试试这个:
进行此搜索:“bmw 116i”
(MATCH(a.title)AGAINST('+ bmw + 116i“bmw 116i”'在布尔模式中)
不是最好的解决方案,但可能有所帮助...