我面临一种奇怪的情况,我的全文搜索查询似乎匹配除了完全匹配之外的所有内容......
我的意思是输入是:
帝国全面战争
它将匹配为:
帝国全面战争限量版
......尽管数据库中有一条记录显示:帝国全面战争
这是我的疑问:
$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猎人” 版
搜索字符串(输入):孤岛危机3由查询返回的匹配:孤岛危机3 猎人版
孤岛危机3没有被匹配而是另一个像“孤岛危机3猎人版”的记录相匹配,这是......意想不到的,因为我希望它与“孤岛危机3”相匹配。
当我输出此查询的$ row数组时,我可以看到不包括“孤岛危机3”:
替代品:孤岛危机3猎人版100%
替代方案:孤岛危机2最高版82%
替代方案:孤岛危机70%
替代方案:孤岛惊魂3豪华版32%
替代品:孤岛惊魂2财富版32%
替代方案:模拟城市4豪华版31%
替代方案:SimCity限量版31%
替代方案:战地3高级版31%
替代方案:战地3限量版31%
替代方案:文明5黄金版31%
编辑2:
手动输入查询将返回所需的结果。
所以查询似乎有效,但我似乎丢失了返回数组的第一个条目......
答案 0 :(得分:0)
我通过移动outside
循环的数组分配while
解决了我的问题。
现在全文查询匹配游戏标题,如果它们存在于数据库中,则最高可达99.9%。
如果没有,那就太疯狂了。