Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 作为子字符串的NHibernate匹配属性_C#_Nhibernate_Substring - Fatal编程技术网

C# 作为子字符串的NHibernate匹配属性

C# 作为子字符串的NHibernate匹配属性,c#,nhibernate,substring,C#,Nhibernate,Substring,我试图找到“最好”的方式来匹配,例如,在RSS文章中匹配政客的名字。这些名称将存储在使用NHibernate访问的数据库中。例如: Id Name --- --------------- 1 David Cameron 2 George Osborne 3 Alistair Darling 身份证名称 --- --------------- 1大卫·卡梅伦 乔治·奥斯本 3阿利斯泰尔·达林 在撰写本文时,BBC政治新闻RSS订阅源中有一个带有描述的项目 后座议员保守党议员向财政大臣

我试图找到“最好”的方式来匹配,例如,在RSS文章中匹配政客的名字。这些名称将存储在使用NHibernate访问的数据库中。例如:

Id Name --- --------------- 1 David Cameron 2 George Osborne 3 Alistair Darling 身份证名称 --- --------------- 1大卫·卡梅伦 乔治·奥斯本 3阿利斯泰尔·达林 在撰写本文时,BBC政治新闻RSS订阅源中有一个带有描述的项目

后座议员保守党议员向财政大臣乔治·奥斯本施压,要求他阻止英国铁路公司将通勤票价提高11%。 对于这篇文章,我想检测一下是否提到了乔治·奥斯本。我意识到有几种方法可以做到这一点,例如,首先选择所有政客的名字,并在代码中进行比较,或者做类似的NHibernate


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

按照下面的思路,我要么使用正则表达式,要么使用包含来获得与提要匹配的数据。政客姓名和ID可以是内存中的一个简单集合

然后,可以将提要保存在带有guid的memcached或redis(甚至db也可以)中。然后将关联的guid保存在一个表中,该表包含一个id为feed的guid

对于某些统计数据,您还可以有一个表,该表是所提到的政治家id、num\u articles\u的集合,其中所提到的num\u articles\u递增1


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

正如我们在评论中所讨论的,我相信有一种更简单的方法可以解决此问题:

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

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

    此查询是在数据库中还是在内存中执行?也就是说,你是收到提要、保存它然后查询,还是下载后就可以查询?我对这两种方法都持开放态度。该提要将在某个时候进入数据库。政客名单多久更新一次?我想不经常吧。您只需在内存中保留一个政客列表,对于每个下载的提要条目,只需在polities FeedEntry.Content.Contains(Name)
    中为每个名称运行一个
    。您可以使用一个简单的过期逻辑在几个小时后刷新政客列表,以确保其已更新。或者,更好的方法是:如果政客的条目仅使用你的应用程序更新,你可以在成功写入后刷新列表。如果你想到需要执行此操作的SQL语句,我想你会发现很难构造有效的查询。我认为@AndreCalil的缓存解决方案是最好的选择——您可以将大量行压缩到缓存中。您还可以使用Lucene.net对RSS文章进行索引(可能只是在内存中),然后查询索引。这将为您提供每个搜索结果的相关性评级。