繁体   English   中英

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

[英]MySQL MATCH AGAINST query not returning certain requests

我的网站上有一个搜索表单,该表单可以在表中搜索匹配标题的文章标题。 它似乎适用于某些字符串,但不适用于其他字符串,我不确定为什么。 例如,如果您搜索“刺客信条”,则搜索功能将返回表中的右行。 但是,如果您搜索“我们中的最后一个人” ,即使其中包含带有该字符串的文章标题,也不会有结果。

以下是我的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());
    }
}

我相信其不适用于“我们中的最后一个人”的原因,因为它们在全文搜索的上下文中都被称为停用词

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

ft_stopword_file = ""

重新启动mysql引擎并重建索引;

希望能奏效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM