如何使mysql在全文搜索中自动粗体匹配单词

时间:2011-02-12 13:40:38

标签: php mysql search relevance

我试图在标题中准确地解释我的问题。我可以在mysql查询本身中通过 在查询中包围匹配的单词吗? MySQL查询是:

选择id,FirstName,LastName,addcomments WHERE MATCH(FirstName,LastName,addcomments) 反对('一些示例文本'WITH QUERY EXPANSION)

mysql的结果应该是:

id | FirstName       | LastName             | addcomments 

1  |<b>some</b> name | lastname <b>text</b> | comments have <b>some sample text</b> inside

任何帮助都将深表感谢

3 个答案:

答案 0 :(得分:3)

这是一个非问题,因为MySQL根本没有格式化结果,它将数据集传递给应用程序。然后由应用程序根据数据执行它想要的操作。

如果您使用的是PHP,则可以在结果上使用str_replace将关键字替换为关键字的粗体版本

此处还存在安全问题 - 如果您的数据库返回HTML,则必须使用编码输出内容。这意味着如果有人设法将恶意记录注入您的数据库,您的网站可能会提供XSS攻击或其他令人讨厌的代码

答案 1 :(得分:1)

根据输出的显示位置,您可能会发现这会产生混合结果。例如,正确转义文本使其在命令行中显示为粗体或彩色与在html,rtf或pdf等中以粗体显示不同。

如果您使用任何用于显示输出的问题解决问题,您将获得更可预测和可维护的结果。

答案 2 :(得分:1)

感谢kris的回复。我同意mysql将返回任何应用程序可以使用的通用结果。但是我可以为同样的效果编写一个mysql函数吗?

另外,我尝试为此编写php函数,但它不起作用:

$searchitems=explode(" ", $trimmed);
$totalSearchItems = count($searchitems);

while ($row= mysql_fetch_array($result))
{
      for($i=0;$i<$totalSearchItems;$i++)
      {
            str_replace($searchitems[$i], '<b>'.$searchitems[$i].'</b>', $row);
      }
      //Display $row
}