4

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

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

目前这里是这个过程:

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

5 回答 5

7

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

于 2009-01-16T14:20:31.277 回答
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的 Google 帮助:备忘单中定义。

...

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

于 2009-01-16T14:30:28.107 回答
1

您可以查看 Lucene.net,它将最大限度地减少对搜索查询的数据库调用。

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

Lucene.Net 是 Java Lucene 搜索引擎到使用 Microsoft .NET Framework 的 C# 和 .NET 平台的源代码、每个类、每个 API 和算法端口。

Lucene.Net 坚持使用 Lucene 的原始 Java 实现中使用的 API 和类。保留 API 名称和类名称的目的是使 Lucene.Net 具有 C# 语言和 .NET Framework 的外观和感觉。例如,Java 实现中的 Hits.length() 方法现在读取 C# 端口中的 Hits.Length()。

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

于 2009-01-16T14:23:07.933 回答
1

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

于 2009-01-16T14:47:52.643 回答
0

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

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

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

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

于 2009-01-16T14:22:17.750 回答