MySQL全文搜索-搜索短词

Puz*_*uzo 1 php mysql full-text-search search-engine codeigniter

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

我想找到所有品牌“ 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
Run Code Online (Sandbox Code Playgroud)

我无权修改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`
Run Code Online (Sandbox Code Playgroud)

搜索返回0行。为什么?所有输入字符串(“ BMW”,“ 116”)的最小长度为3。我在做什么错?

问候,马里奥

Kai*_*ing 5

在处理与匹配时(关于文本长度),我遇到了类似的问题,我的答案是先将字符串加长,然后在喜欢和匹配之间切换以缩短单词。不是我所说的优雅,但这是我所能做的,因为我也无法访问该配置。

至于第二个问题,您确定默认值不是4吗?我记得我无法搜索“艺术”一词。3个字母。必须与4个字符以下的所有内容一起使用。

  • 只是为了确保您正在测试这些查询而没有价格条件,对吗?我认为类别227是汽车,或者在它们之间应该通用的东西。您可以尝试看看116i是否有所作为?布尔值可能对116是错误的,因为严格来说不是116i。我认为()与之匹配必须秒数,但它的目的是比较多个字符串。因此,您正在寻找BMW AND 116,如果不包含i,它可能会失败。对于型号,请尝试仅将基数与星号一起使用-在这种情况下为116 \ * (2认同)