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 < 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;
}
}
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)
任何人都有任何想法,我在这里做错了什么?
谢谢.
因为'welcome'是一个STOPWORD,所以 MySQL 会跳过搜索这个词。
在这里查看 MySQL 全文搜索的停用词列表
http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html
另外请注意搜索短语中单词的长度,如果其长度小于4,默认情况下MySQL也会跳过搜索它。
例如“我就是这样”、“美国”、“php”、“工作”等(了解更多信息ft_min_word_len)
| 归档时间: |
|
| 查看次数: |
2862 次 |
| 最近记录: |