php mysql匹配没有结果

Kel*_*ton 6 php mysql full-text-search

好吧,所以我正在尝试在我的mysql表上进行全文搜索.这是查询

SELECT *,
       MATCH (title, joke) AGAINST ('welcome') AS relevance,
       MATCH (title) AGAINST ('welcome') AS title_relevance
FROM jokes
WHERE MATCH (title, joke) AGAINST ('welcome') 
AND flags < 5
ORDER BY title_relevance + relevance + ups DESC, downs ASC LIMIT 0, 30
Run Code Online (Sandbox Code Playgroud)

这是我的桌子

CREATE TABLE IF NOT EXISTS `jokes` (
  `jid` varchar(24) NOT NULL,
  `uid` int(11) NOT NULL,
  `title` mediumtext NOT NULL,
  `joke` longtext NOT NULL,
  `ups` int(11) NOT NULL DEFAULT '0',
  `downs` int(11) NOT NULL DEFAULT '0',
  `flags` int(11) NOT NULL DEFAULT '0',
  `createddate` int(11) NOT NULL,
  `editdate` int(11) NOT NULL,
  PRIMARY KEY (`jid`),
  FULLTEXT KEY `searcher` (`title`,`joke`),
  FULLTEXT KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

我有几行在标题或笑话中包含欢迎,但我似乎没有得到任何结果.我搜索的是什么词并不重要.

我也试过删除AND flags < 5ups DESC, downs ASC LIMIT 0,30

两者似乎都不起作用.

这就是我用php代码做的事情

if($st->prepare($SearchQuery))
{
    if(!$st->execute())
        ChromePhp::log("Execute Error: " . $st->error);
    else
    {
        $results = fetchAll($st);
        $ret = new stdClass();
        $ret->TotalCount = 0;
        $ret->Results = $results;
        return $ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是fetchAll(它已经适用于我抛出的每一个其他查询).

function fetchAll($result)
    {    
        $array = array();

        if($result instanceof mysqli_stmt)
        {
            $result->store_result();

            $variables = array();
            $data = array();
            $meta = $result->result_metadata();

            while($field = $meta->fetch_field())
                $variables[] = &$data[$field->name]; // pass by reference

            call_user_func_array(array($result, 'bind_result'), $variables);

            $i=0;
            while($result->fetch())
            {
                $array[$i] = array();
                foreach($data as $k=>$v)
                    $array[$i][$k] = $v;
                $i++;

                // don't know why, but when I tried $array[] = $data, I got the same one result in all rows
            }
        }
        elseif($result instanceof mysqli_result)
        {
            while($row = $result->fetch_assoc())
                $array[] = $row;
        }

        return $array;
    }
Run Code Online (Sandbox Code Playgroud)

任何人都有任何想法,我在这里做错了什么?

谢谢.

hun*_*eox 2

因为'welcome'是一个STOPWORD,所以 MySQL 会跳过搜索这个词。

在这里查看 MySQL 全文搜索的停用词列表

http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html

另外请注意搜索短语中单词的长度,如果其长度小于4,默认情况下MySQL也会跳过搜索它。

例如“我就是这样”、“美国”、“php”、“工作”等(了解更多信息ft_min_word_len