我面临一个奇怪的情况,我的全文搜索查询似乎匹配除了完全匹配之外的所有内容......
我的意思是如果输入是:
帝国全面战争
它将匹配为:
帝国全面战争限量版
...尽管数据库中有一条记录准确地说:帝国全面战争
这是我的查询:
$query_GID = "SELECT game, gameID,
MATCH (game) AGAINST ('$game_title') AS score
FROM gkn_catalog_match WHERE MATCH (game) AGAINST
('$game_title');";
$result_GID = $dbc->query($query_GID);
$row_GID = mysqli_fetch_array($result_GID,MYSQLI_ASSOC);
出于调试目的,我继续编写此代码以在返回的数组中输出所有匹配的替代项,但是完全匹配不在其中...
$GID = $row_GID['gameID'];
$GName = $row_GID['game'];
$Gscore = $row_GID['score'];
$max_score = 0;
$data = array();
while($row_GID = mysqli_fetch_assoc($result_GID)) {
if($row_GID['score'] > $max_score){ $max_score = $row_GID['score']; } //because we are ordering by score we can assume on the first run this wil be the max score.
echo "<br><b>Alternatives: " .$row_GID['game']."".@number_format(($row_GID['score']/$max_score)*100,0)."%</b>\n";
}
我的问题是:为什么即使输入字符串和数据库中的记录相同,我也没有得到所需/精确匹配?
即使我输出了数组,似乎甚至没有从数据库中提取完全匹配,因为它在数组中无处可寻。
编辑:
数据库中的示例情况记录:
孤岛危机 孤岛
危机 2
孤岛危机 2 最大版
孤岛危机 3
孤岛危机 3 猎人版搜索字符串(输入):Crysis 3
查询返回的匹配项:Crysis 3 Hunter Edition
孤岛危机 3 没有匹配,而是匹配了另一条记录,如孤岛危机 3 猎人版,这是……意外,因为我希望它匹配孤岛危机 3。
当我输出此查询的 $row 数组时,我可以看到 Crysis 3 不包括在内:
Alternatives: Crysis 3 Hunter Edition 100%
Alternatives: Crysis 2 Maximum Edition 82%
Alternatives: Crysis 70%
Alternatives: Far Cry 3 Deluxe Edition 32%
替代品:孤岛惊魂 2 财富版 32%
替代品:模拟城市 4 豪华版 31%
替代品:模拟城市限量版 31%
替代品:战地 3 高级版 31%
替代品:战地 3 限量版 31%
替代品:文明 5 黄金版 31%
编辑2:
手动输入查询会返回所需的结果。
所以查询似乎有效,但是我似乎丢失了返回数组的第一个条目......