实施搜索的最佳方式是什么?

时间:2009-11-09 20:02:46

标签: c# .net sql-server search

我有一个要求,即用户在搜索框中输入几个字词并点击“开始”。 有没有人有关于如何实现跨越几个数据库表的动态搜索的任何好资源?

谢谢, 麦克

5 个答案:

答案 0 :(得分:6)

我要投票给Lucene。虽然SQL Server确实提供了全文索引和一些搜索功能,但它并不是最好的搜索引擎。根据我的经验,在您拥有大量索引项目(最少数万到数十万)之前,它不会提供最佳结果或结果排名。

相比之下,Lucene显然是一个搜索引擎。它是一个倒置索引,表现得像你的磨机互联网搜索引擎。 Lucene提供了一个非常丰富的索引和搜索平台,以及一些用于查询索引的丰富的C#和.NET API。甚至还有一个LINQ to Lucene提供程序,它允许您使用LINQ查询Lucene索引。

使用Lucene的一个缺点是你必须构建一个索引,这是一个独立于数据库运行的边带过程。您还必须编写自己的工具来管理索引。您的搜索索引(取决于您更新频率的频率)可能不是最新的100%。一般来说,这不是一个大问题,但如果你有资源,Lucene索引会每隔几分钟逐步更新,以保持“新鲜”。

答案 1 :(得分:3)

答案 2 :(得分:3)

由于缺乏细节,这是一个非常复杂的问题。如果您只需要在几个表/列上进行简单搜索,那么单个(cludgy)搜索SP可能就足够了。

如果你需要更多功能,例如:

  • 搜索大量表格
  • 支持大量数据
  • 搜索单词的形式
  • 逻辑运算

然后您可能想要查看全文搜索(这是MS Sql 2000及更高版本的一部分)。通过全文搜索加速的初始投资可能有点抵消,但与实施上述功能相比,您可能会节省大量的时间和精力。

以下是一些全文搜索链接,可帮助您入门:

希望有所帮助。

答案 3 :(得分:1)

好的,有一些请求更多信息,所以让我提供一些。 我有几个表(即用户,公司,地址),我希望用户能够输入这样的内容:

“microsoft wa gates”

并显示包含“盖茨”,“微软”和“华盛顿”结果的结果列表。

Lucene似乎很酷。

答案 4 :(得分:0)

您可以创建一个接收搜索词作为参数的SP,并将一些“选择”(记录集)重新发送到启动的程序。它可以为每个表返回一个选项,您可以使用应用程序代码中的数据执行任何操作。

如果只需要接收数据集,可以使用表的UNION创建视图以合并公共模式中的列,然后以相同的方式过滤视图。您将在应用程序中仅收到一个数据集,其中包含在视图中合并的所有信息并进行过滤。