MySQL全文搜索 - 搜索短文

时间:2011-11-28 20:00:25

标签: php mysql codeigniter full-text-search search-engine

我有问题。我做了一个简单的搜索引擎,搜索汽车的品牌和型号。出于查询性能和数据库中的大量数据的原因,我决定使用全文搜索。没关系,但现在我遇到了问题:

我想找到所有品牌为“奥迪”和型号为“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.我做错了什么?

问候,马里奥

3 个答案:

答案 0 :(得分:5)

在处理匹配时遇到了类似的问题(关于文本长度),我的回答是首先对字符串进行strlen,然后在like和match之间切换以获得更短的单词。不是我称之为优雅,但这是我所能做的,因为我也无法访问配置。

至于第二个问题,你确定默认值不是4吗?我记得在我的案例中我无法搜索“艺术”一词。 3个字母。不得不喜欢4个字符以下的所有内容。

答案 1 :(得分:2)

除非您可以访问配置文件并且可以更改它,否则我担心没什么可做的。

对ft_min_word_len的更改需要重新启动服务器并完全重建全文索引。

As found here

答案 2 :(得分:1)

试试这个:

进行此搜索:“bmw 116i”

(MATCH(a.title)AGAINST('+ bmw + 116i“bmw 116i”'在布尔模式中)

不是最好的解决方案,但可能有所帮助...

相关问题