我有一个SQL Server 2008数据库,其中一个表有一个varchar(1000)字段,其中包含一堆关于书籍的用户输入。我有另一个包含一堆关键字的表。当我呈现用户关于书籍的信息时,我想突出显示(或最终创建超链接)这些关键字。我正在寻找有关扫描文本和匹配关键字的最有效方法的建议。我不确定是否有办法在SQL中正确执行它,或者它需要在代码中。感谢。
答案 0 :(得分:0)
我建议在代码中执行此操作。它是业务逻辑,除此之外还减轻了数据库中的负载 - 因此,如果数据库位于运行应用程序的服务器以外的计算机中,则不会占用该计算机的资源。
我认为正则表达式会为你做到这一点 - 它是有史以来发明的最有效的文本匹配方法,而大多数技术(不仅仅是.NET)的内部实现几乎是你能得到的最好的。如果你试图提出别的东西,你最多只能重新发明轮子。
所以我会这样做:将每个关键字放在一个哈希表或字典中 - 这样可以减少重复项,然后重复一遍。然后,对于主文本中关键字的每个匹配,您可以获得匹配的第一个和最后一个索引,并使用标记包装突出显示和链接。
答案 1 :(得分: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.
编辑:这不是一个完美的例子。你必须删除标点符号,而不是最终版本。希望这能让你走上正轨。
答案 2 :(得分:0)
如果链接已修复,那么我个人会在写入数据库时执行此操作,因为它只会执行一次,因此不需要额外的工作就可以显示。