2009-01-16 30 views
4

我有一个拥有超过400,000个项目的网站。一些相似的,一些非常不同。我们希望提供一种以最佳方式搜索这些项目的方法。交付后,它使用全文索引的网站。最好的解决方案基本上是最基本的,最坏的情况是可悲的不足。构建搜索功能的最佳方法

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

目前这里的过程是:

  1. 用户输入值到文本框。
  2. 我们'清理'此条目。删除可能是黑客入侵的'可怕'字符。删除关键字(和,或等..)
  3. 将值传递到存储过程以返回结果。
  4. 返回结果。

回答

7

看看Lucene.NET。我认为这是对SQL Server中全文搜索的巨大改进。

+1

我希望杰夫会读这个问题:) StackOverflow是基于SQLServer FTS的糟糕的内置搜索的一个很好的演示:) – aku 2009-01-16 14:27:37

0

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

这是一个功能,我想在这里看到在计算器上,以及在提供搜索功能的任何其他网站中的情况下

  • 给予更多的优先级(重)到您的文档 的某些字段(计算器 - 搜索应该优先主题标题)

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

1

你可以看一下Lucene.net,它会最小化对搜索查询的数据库调用。

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

Lucene.Net以下是源代码, 类每类,API-每API和Java Lucene的 搜索引擎的 algorithmatic端口到C#和.NET 平台利用Microsoft .NET 框架。

Lucene.Net坚持使用原始Java 实现Lucene的API和 类。 API 名称以及类名称保留 Lucene.Net的外观和感觉的C# 语言和.NET框架。例如, 示例中,Java实现中的方法Hits.length()在 中现在的读数为 Hits.Length()在C#端口中。

除了C#的API和类 端口,Java 的算法Lucene被移植到C#Lucene。这 意味着用Java创建的索引 Lucene与C#Lucene来回兼容 ;在阅读时, 写作和更新。事实上,可以同时搜索Lucene 索引,并使用Java Lucene和C# Lucene过程更新 。

2

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

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

摘录:

...

谷歌风格

一个成功应用的关键是 使其易于使用,但强大。 谷歌已经用他们的网络 搜索引擎完成了这项工作。查询 的语法简单直观,但功能全面。虽然谷歌查询的基本 积木是 简单,你可以结合他们在 强大的方式。我将从基本的 谷歌查询语法开始,并添加一些 其他运算符以充分利用SQL Server CONTAINS 谓词语法的力量 。完整的Google 语法在Google Help:备忘单 http://www.google.com/help/cheatsheet.html中定义。

...

物品具有完整的示例代码,甚至一个链接下载它。即使你不打算实施它,它也是一个有趣的阅读。

1

您可以使用Google站点搜索来提供搜索结果。并不总是能够让您灵活地按照自己的意愿显示结果,但对于许多人来说,这已经足够好了。