我做了一个MySQL全文搜索,最小搜索长度为3个字符,搜索工作正常,除了一些单词没有结果返回结果可用。
如果我搜索单词avg
,则会返回结果。如果我搜索单词how
,则不会返回任何结果。
我正在尝试这种方式。
$keyword = preg_replace('/ */', ' *', $keyword);
$keyword = preg_replace('/\s+/', ' *', $keyword);
$keyword = preg_replace('/\W+/', ' *', $keyword);
$keyword = "$keyword*";
$query = "SELECT *, MATCH (title, link) AGAINST ( ? IN BOOLEAN MODE) AS rel FROM $table WHERE MATCH (title, link) AGAINST ( ? IN BOOLEAN MODE) GROUP by rel DESC, $order $sort LIMIT $rpp OFFSET $offset";
我也尝试过这些解决方案,但同样没有结果“how”
//Changing
$keyword = preg_replace('/ */', ' +', $keyword);
$keyword = preg_replace('/\s+/', ' +', $keyword);
$keyword = preg_replace('/\W+/', ' +', $keyword);
$keyword = preg_replace('/ */', '+', $keyword);
$keyword = preg_replace('/\s+/', '+', $keyword);
$keyword = preg_replace('/\W+/', '+', $keyword);
//In combination
$keyword = "+$keyword*";
$keyword = "$keyword*";
$keyword = "+$keyword";
$keyword = "$keyword";
请查看并说明为什么我的搜索无法处理某些字词。
感谢。
更新
单词how
存在于10行中,
单词avg
存在于16行中。
我有超过650行。
我在查询中也使用IN BOOLEN MODE
,因此对于使how
成为停用词的MySQL 50%规则应该没有问题。
答案 0 :(得分:1)
avg
和how
都太短,请参阅documentation。您更改了此内容,但how
是stop word list的一个元素:
布尔全文搜索具有以下特征:
适用最小和最大字长全文参数。
禁用词汇表适用。
使用ft_stopword_file
系统变量覆盖禁用词列表:
要覆盖默认的禁用词列表,请设置ft_stopword_file系统 变量。 (请参见第5.1.4节“服务器系统变量”。)变量 value应该是包含禁用词的文件的路径名 list,或禁用禁用词过滤的空字符串。