0

我正在尝试找到匹配的“最佳”方式,例如,RSS 文章中的政客姓名。这些名称将存储在使用 NHibernate 访问的数据库中。举个例子:

标识名称
--- ---------------
1 大卫卡梅隆
2 乔治·奥斯本
3 阿利斯泰尔亲爱的

在撰写本文时,BBC 政治新闻 RSS 提要有一个项目的描述

后座保守党议员向总理乔治奥斯本施加压力,要求其阻止英格兰的铁路公司将通勤票价提高 11%。

对于这篇文章,我想检测到提到了 George Osborne。我意识到有几种方法可以做到这一点,例如首先选择所有政治家的名字,然后在代码中比较它们,或者执行 NHibernate 等效的 LIKE。

应用程序本身将有几十个提要,最多每 15 分钟查询一次。显然存在速度、内存和扩展问题,所以我想寻求推荐的方法(如果相关,还有 NHibernate 查询)。

4

2 回答 2

1

正如我们在评论中讨论的那样,我相信有一个更简单的方法来解决这个问题:

  1. 把政客的名单记在心里。因为这些实体不会经常更新,所以这样工作是安全的。只需实现一个过期逻辑,迟早会从数据库中刷新它。
  2. 对于每个下载的提要条目,只需foreach Name in Politicians FeedEntry.Content.Contains(Name)在将条目保存到数据库之前运行(或类似的东西)。

就这样,您的解决方案不需要复杂的查询和更少的 I/O。

于 2012-08-22T12:51:22.790 回答
0

按照以下思路,我将使用正则表达式或包含来获取与提要匹配的政客。政客姓名和身份证可以是内存中的一个简单集合。

然后可以使用 guid 将提要保存在 memcached 或 redis 中(即使是 db 也可以)。然后将关联的 guid 保存在包含政治家 ID、feed_guid 的表中。

对于某些统计信息,您还可以有一个表,它是政治家 ID、num_articles_提到的聚合表,其中 num_articles_提到的递增 1。

如果需要,您可以将上述内容包装在事务中。

于 2012-08-21T19:17:34.730 回答