MySQL MATCH AGAINST查询不返回某些请求

时间:2014-08-12 07:28:21

标签: php mysql sql

我的网站上有一个搜索表单,可以在我的表格中搜索文章标题以查找匹配的单词。它似乎适用于某些字符串而不是其他字符串,我不知道为什么。例如,如果搜索"assassin's creed",搜索功能将从表中返回正确的行。但是如果你搜索"the last of us",就没有结果,即使文章标题中包含该字符串。

下面是我的PHP / SQL命令。我需要添加/更改吗?每次运行查询时,是否需要在表的列上运行FULLTEXT索引?这是我第一次使用MySQL的MATCH AGAINST功能。通常我会使用LIKE,但在做了一点阅读后,显然MATCH AGAINST是一个更好的方法。

public function fetchSearchArticles($q, $category, $platform, $sort) {

    $q = addslashes($q);
    $category = ($category != 'all')? ' AND `cat_id` = '.$this->fetch_category_id($category).' ' : '';
    $platform = ($platform != 'all')? ' AND `'.str_replace('-', '_', $platform).'` = 1 ': '';
    $sort = ($sort != 'rel')? '`article_timestamp` '.strtoupper($sort).'' : "MATCH(`article_title`) AGAINST('$q')";

    $query = $this->db->prepare ("
             SELECT * 
             FROM articles 
             WHERE `article_is_published` = 1
             $platform
             $category
             AND MATCH(`article_title`) AGAINST('+$q' IN BOOLEAN MODE) 
             ORDER BY $sort
             LIMIT 20
            ");

    try{
        $query->execute();
        $articles = $query->fetchAll(PDO::FETCH_ASSOC);
        $query->closeCursor();
        return $articles;

    } catch(PDOException $e){
        die($e->getMessage());
    }
}

1 个答案:

答案 0 :(得分:1)

我相信它不适合我们最后一个"因为,在全文搜索的上下文中,它们都被称为stop words

您可以验证相同或替代解决方案,我建议您禁用全文中的停用词。您只需找到.cnf文件并添加它,

ft_stopword_file = ""

重启mysql引擎并重建索引;

希望有效