好了,我正在尝试对我的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这是我的桌子
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;我有几行在标题或笑话中包含欢迎,但似乎没有得到任何结果。我搜索什么词都无关紧要。
我还尝试过删除、flags < 5和ups 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;
}
}这就是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;
}有人知道我做错了什么吗?
谢谢。
发布于 2011-12-29 01:10:49
因为欢迎‘’是一个STOPWORD,所以MySQL会跳过搜索这个单词。
查看MySQL全文搜索的停用词列表
http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html
并且请提醒搜索短语中的单词长度,如果它的长度小于4,默认情况下MySQL也会跳过搜索。
例如“我的方式”、“美国”、"php“、"job”等(了解更多关于ft_min_word_len的信息)
发布于 2011-12-29 14:03:53
我不太确定这是否会有很大的不同,但你有没有尝试过使用布尔模式?如下所示:
AGAINST ('welcome' IN BOOLEAN MODE)https://stackoverflow.com/questions/8639364
复制相似问题