MySQL Fulltext匹配除完全匹配之外的所有内容?

时间:2013-03-11 15:09:45

标签: php mysql full-text-search match

我面临一种奇怪的情况,我的全文搜索查询似乎匹配除了完全匹配之外的所有内容......

我的意思是输入是:

  

帝国全面战争

它将匹配为:

  

帝国全面战争限量版
  ......尽管数据库中有一条记录显示:帝国全面战争

这是我的疑问:

     $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:

手动输入查询将返回所需的结果。
所以查询似乎有效,但我似乎丢失了返回数组的第一个条目......

1 个答案:

答案 0 :(得分:0)

我通过移动outside循环的数组分配while解决了我的问题。
现在全文查询匹配游戏标题,如果它们存在于数据库中,则最高可达99.9%。

如果没有,那就太疯狂了。