【问题标题】:MySQL full text search not working on some wordsMySQL全文搜索不适用于某些单词
【发布时间】:2014-04-13 06:15:42
【问题描述】:

我进行了 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,所以MySQL 50% 规则将how 设为停用词应该没有问题。

【问题讨论】:

    标签: php mysql full-text-search


    【解决方案1】:

    avg和how在标准配置中都太短了,见documentation。你改变了它,但 how 是 stop word list 的一个元素:

    布尔全文搜索具有以下特点:

    应用最小和最大字长全文参数。

    停用词列表适用。

    用ft_stopword_file 系统变量覆盖停用词列表:

    要覆盖默认的停用词列表,请设置 ft_stopword_file 系统 多变的。 (请参阅第 5.1.4 节,“服务器系统变量”。)变量 value 应该是包含停用词的文件的路径名 列表或空字符串以禁用停用词过滤。

    【讨论】:

    • 是的,我刚刚发现并做到了,我会接受您的回答,因为它将指导任何寻找相同解决方案的人。
    猜你喜欢
    • 2012-10-05
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多