4

我有一个 SQL Server 2008 数据库,它有一个带有 varchar(1000) 字段的表,其中包含一堆关于书籍的用户输入。我有另一个包含一堆关键字的表。当我呈现用户关于书籍的信息时,我想在这些关键字上突出显示(或最终创建超链接)。我正在寻找有关扫描文本和匹配关键字的最有效方法的建议。我不确定是否有办法在 SQL 中正确执行此操作,或者是否需要在代码中。谢谢。

4

3 回答 3

0

我建议在代码中进行。它是业务逻辑,此外还减轻了数据库的负载 - 因此,如果数据库位于运行应用程序的服务器之外的机器中,则您不会占用该机器的资源。

我认为正则表达式会为您解决问题 - 它是有史以来最有效的文本匹配方法,并且大多数技术(不仅是 .NET)的内部实现几乎是您可以获得的最好的。如果你试图想出别的东西,你充其量只是在重新发明轮子。

所以我会这样做:将每个关键字放在哈希表或字典中 - 它具有切断重复项的好处,然后遍历它。然后,对于正文中关键字的每个匹配项,您可以获得匹配项的第一个和最后一个索引,并将其包装为突出显示和链接的标记。

于 2013-04-15T13:47:07.563 回答
0

这是我编写的一个快速 LINQPad 程序,它将用与键匹配的字典值替换字符串中的值。让我知道这是否是您想要的。

旁注:我同意其他所有人的观点,出于各种原因,您应该在应用程序层执行此操作。

void Main()
{
    Dictionary<string, string> links = new Dictionary<string, string>();
    links.Add("awesome", "link-to-awesome");
    links.Add("okay", "link-to-okay");

    string text = "This is some text about an okay book review of an otherwise awesome book.";

    string result = links.Aggregate(text, (current, kvp) => current.Replace(kvp.Key, kvp.Value));
    text.Dump();
    result.Dump();
}

结果:

This is some text about an okay book review of an otherwise awesome book. 
This is some text about an link-to-okay book review of an otherwise link-to-awesome book.

编辑:这不是一个完美的例子。对于最终版本,您必须去掉标点符号和其他东西。希望这能让你走上正确的轨道。

于 2013-04-15T15:17:05.933 回答
0

如果链接是固定的,那么我个人会在写入数据库时​​执行此操作,因为它只会执行一次,那么它不需要额外的努力来显示。

于 2013-04-15T15:19:43.767 回答