MySQL全文搜索-搜索简短的单词


MySQL Full-text search - search for short words

我有一个问题。我做了一个简单的搜索引擎,可以根据品牌和车型进行搜索。由于查询性能和数据库中数据量大的原因,我决定使用全文搜索。还好,但是现在我遇到了问题:

我想找到所有品牌为"奥迪",型号为"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。我做错了什么?

问候,马里奥

我在处理match against(关于文本长度)时遇到了类似的问题,我的答案是先筛选字符串,然后在like和match against之间切换较短的单词。这不是我所说的优雅,但这是我所能做的,因为我也没有权限访问配置。

关于第二个问题,你确定默认值不是4吗?我记得我不能搜索"艺术"这个词。三个字母。

除非您可以访问配置文件并可以更改它,否则恐怕没有什么可做的。

修改ft_min_word_len需要重新启动服务器并重新构建全文索引。

试试这个:

查找:"bmw 116i"

(MATCH(a.title) AGAINST ('+bmw +116i "bmw 116i"' IN BOOLEAN MODE))

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