0

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

我的意思是如果输入是:

帝国全面战争

它将匹配为:

帝国全面战争限量版
...尽管数据库中有一条记录准确地说:帝国全面战争

这是我的查询:

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

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

4

1 回答 1

0

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

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

于 2013-03-11T16:43:15.723 回答