实现ASP.NET MVC应用程序的全文搜索的最佳方法是什么?

时间:2010-09-29 17:29:25

标签: asp.net asp.net-mvc fluent-nhibernate full-text-search lucene.net

我使用MVC 2.0和Fluent NHibernate构建了一个ASP.NET MVC应用程序(由于某些原因隐藏在存储库后面)。该应用程序代表了一个非常复杂的域,其中包含一些不同的对象,如用户,消息,注释,文件和约会。

现在我想要实现全文搜索,这使用户只需输入搜索短语即可轻松查找所有类型的内容。当单独处理应用程序中所有类型的不同对象时,我现在必须将它们“放在一起”进行搜索。这意味着用户不区分不同的类型,他只输入“xyz”并希望将结果列入列表,评论与消息混合等。

选项1是创建一个搜索服务,该服务从不同的存储库中提取搜索结果并准备组合输出(排序,分页等)。但是,当数据背后的增长(并且会增长)时,这确实非常昂贵。

所以我正在寻找替代解决方案。目前我正在使用SQL Server 2008.我发现的是lucene.net(http://lucene.apache.org/lucene.net/),但我还没投入太多时间。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

对于.Net,您可以查看使用lucene作为索引存储的RavenDB,并将为您提供Lucene的搜索功能作为奖励。它可能更容易使用。当然更灵活,更好的API的imo。但是你应该研究一下存储开销。

根据您的需要,您可以在SQL Server中打开Full Text Search,从而为您提供SQL的其他查询功能。这样,您无需管理数据库数据之外的其他索引。如果您的数据驻留在多个存储库中,那么使用像Lucene这样的外部索引可能是更好的方法。

至于其他全文搜索引擎,您有Microsoft Search Server Express,但您可能必须创建自己的内容连接器才能获取数据(同样取决于您的存储库)。

答案 1 :(得分:2)

我绝对会使用SQL全文功能。我知道有些内容可能在文件,其他结构中可用,但即便如此,大多数数据都应该在后端,而SQL在结构方面的全文索引方面做得很好。

我建议您从SQL全文开始,并创建一个查询其他资源的小组件(如果需要)。我假设80%的可搜索内容都来自SQL Server。

以下是一些使用SQL Server全文开始的资源:

  1. http://msdn.microsoft.com/en-us/library/ms142571.aspx
  2. http://www.dotnetfunda.com/articles/article1019-implementing-fulltext-search-on-view-.aspx?sms_ss=dotnetshoutout

答案 2 :(得分:0)

仅仅说“使用全文”是不够的。他的解决方案不一定是在每个实体类型中进行更高级的文本搜索。他需要能够根据查询字符串查询任何类型实体的索引。我可以看到使用NHibernate.Search作为填充Lucene索引的方法,但不知道它的功能是否支持搜索索引而不管索引文档类型(NHibernate类是否持久化)。因此,您可能需要更直接地查询Lucene索引并解释结果,以便通过NHibernate本身显示或直接检索SQL Server DB中的基础对象。