2013-04-15 141 views
4

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

+0

用户是否将关键字的外键输入到主关键字表中?两张桌子的模式是什么? –

+0

1)把[用户约书输入]进入的foreach字符串数组[] 2)比较每个字符串的关键词,并使其成为超级链接 3)检查响应时间的分析结果 –

+1

我认为这必须通过代码来完成只而是SQL .. – Mudassir

回答

0

我推荐在代码中使用它。这是业务逻辑,除此之外还会减轻数据库中的负载 - 因此,如果数据库位于运行应用程序的服务器之外的计算机中,则不会占用该计算机的资源。

我认为正则表达式可以帮你实现 - 这是最有效的文本匹配方法,大多数技术的内部实现(不仅仅是.NET)几乎是最好的。如果你试图拿出别的东西,那么你最多只能重新发明轮子。

所以我应该这样做:发生在一个哈希表或字典的每一个关键字 - 具有切断重复的奖金,然后通过迭代。然后,对于主文本中关键字的每个匹配项,您可以获取匹配的第一个和最后一个索引,并用高亮和链接的标记包装它。

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. 

编辑:这是不是一个很好的例子。你不得不去掉标点和什么 - 不是最终版本。希望这能让你走上正轨。

0

如果链接固定的,那么我个人会写入到数据库时,它只会进行一次做到这一点的话,就不需要额外的努力来显示。

相关问题