构建搜索功能的最佳方式

时间:2009-01-16 14:07:11

标签: c# sql-server full-text-search

我的网站有超过400,000项。有些相似,有些截然不同。我们希望提供一种以最佳方式搜索这些项目的方法。在交付网站后,它使用全文索引。解决方案充其量是基本的,在最坏的情况下是非常不足的。

那么搜索这些项目的最佳方法是什么?它们存储在SQL Server数据库(2005)中。我们的网站是用C#2.0设计的。

目前正是这个过程:

  1. 用户在文本框中输入值。
  2. 我们'清理'这个条目。删除可能是黑客攻击的“可怕”角色。删除关键词(和,或等等)
  3. 将值传递给存储过程以返回结果。
  4. 返回结果。

5 个答案:

答案 0 :(得分:7)

看看Lucene.NET。我认为这比SQL Server中的全文搜索有了很大的改进。

答案 1 :(得分:2)

SQL Server Central有一篇关于使用SQL Server创建类似Google的全文搜索的文章。不幸的是你必须注册查看完整的文章,但注册是免费的,他们发布了很多好的信息。这是链接:

http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/

摘录:

  

...

     

Google风格

     

成功申请的关键是   使其易于使用但功能强大。   谷歌已经用他们的网络做到了这一点   搜索引擎。查询的语法   简单直观,但是   功能全面。虽然基本   Google查询的构建块是   很简单你可以将它们组合在一起   有力的方式。我将从基础开始   谷歌查询语法并添加一些   额外的运营商利用   SQL Server CONTAINS的强大功能   谓词语法。完整的谷歌   语法在Google中定义   帮助:作弊表   http://www.google.com/help/cheatsheet.html

     

...

这篇文章有完整的示例代码,甚至还有一个下载链接。即使你不打算实现它,它也是一个有趣的读物。

答案 2 :(得分:1)

您可以查看Lucene.net,它将最小化对搜索查询的数据库调用。

来自http://incubator.apache.org/lucene.net/

  

Lucene.Net是源代码,   class-per-class,API-per-API和   Java Lucene的算法端口   搜索引擎到C#和.NET   利用Microsoft .NET的平台   框架。

     

Lucene.Net坚持API和   原始Java中使用的类   实施Lucene。 API   名称和类名称   保留意图给予   Lucene.Net C#的外观和感觉   语言和.NET Framework。对于   例如,方法Hits.length()in   Java实现现在读取   Hits.Length()在C#端口。

     

除了API和类   端口到C#,Java的算法   Lucene被移植到C#Lucene。这个   表示使用Java创建的索引   Lucene是来回兼容的   与C#Lucene;在阅读时,   写作和更新。实际上是一个Lucene   索引可以同时搜索和   使用Java Lucene和C#更新   Lucene处理。

答案 3 :(得分:1)

您可以使用Google网站搜索来提供搜索结果。并不总能让您灵活地根据需要显示结果,但对于许多人来说已经足够了。

答案 4 :(得分:0)

第二步是有争议的 - 你认为什么词是“可怕的”?如果您使用SQL Server内置全文搜索,那么您可以在输入查​​询中手动删除关键字,而不是在sql server中设置鼻子/停用词列表。

以下是我希望在StackOverflow以及提供搜索功能的任何其他网站上看到的一项功能:

  • 为文档的某些字段赋予更多优先级(权重) (在stackoverflow的情况下 - 搜索应优先考虑主题标题)

同时考虑使用FTS的第三方解决方案,例如LuceneSphinx - 它们可以提供比内置功能更好的用户体验。 第三方FTS组件的一些优点是:减少数据库负载,提高搜索结果的相关性,提高索引速度,减小数据库的大小。