【问题标题】:MySQL Fulltext matches everything but the exact match?MySQL全文匹配除了完全匹配之外的所有内容?
【发布时间】:2013-03-11 15:09:44
【问题描述】:

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

我的意思是如果输入是:

帝国全面战争

它将匹配为:

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

这是我的查询:

     $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 猎人版

没有匹配孤岛危机 3,而是匹配了另一条记录,如孤岛危机 3 猎人版,这是……意外,因为我希望它匹配孤岛危机 3。

当我输出这个查询的 $row 数组时,我可以看到 Crysis 3 不包括在内:
替代品:孤岛危机 3 猎人版 100%
替代品:孤岛危机 2 最高版 82%
替代品:孤岛危机 70%
替代品:孤岛惊魂 3 豪华版 32%
替代品:孤岛惊魂 2 财富版 32%
替代品:模拟城市 4 豪华版 31%
替代品:模拟城市限量版 31%
替代品:战地 3 高级版 31%
替代品:战地 3 限量版 31%
替代品:《文明 5》黄金版 31%

编辑 2:

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

【问题讨论】:

  • 将您的 do - while 更改为 while。我怀疑返回的第一条记录是您要查找的记录,但它可能不会显示。
  • 手动运行查询会发生什么?
  • 如果我手动输入我的查询,我将获得所需/完全匹配。 @SableFoste 我将 do - while 更改为一段时间,但仍然没有显示完全匹配。使其显示的唯一方法是手动输入查询...
  • 使用准备好的查询...

标签: php mysql full-text-search match


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多