【问题标题】:What's the best way to implement a search?实现搜索的最佳方式是什么?
【发布时间】:2010-12-14 18:34:42
【问题描述】:

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

谢谢, 迈克

【问题讨论】:

  • 我认为你需要说明的远不止这些......
  • 太模糊了,但我有兴趣看看会出现什么答案。我们也在为我们的软件开发搜索工具。
  • 请重新表述您的问题,以免主观。 “最佳方式”因人而异。

标签: c# .net sql-server search


【解决方案1】:

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

相比之下,Lucene 是一个明确的搜索引擎。它是一个倒排索引,其行为与您运行的磨坊互联网搜索引擎非常相似。 Lucene 提供了一个非常丰富的索引和搜索平台,以及一些用于查询索引的丰富的 C# 和 .NET API。甚至还有一个 LINQ to Lucene 提供程序,它允许您使用 LINQ 查询 Lucene 索引。

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

【讨论】:

  • +1。如果您需要一个围绕搜索的更强大的操作系统,也可以看看 SOLR。
【解决方案2】:

【讨论】:

  • 全文索引在表中包含一个或多个基于字符的列。这就是你在一张桌子上吃的肉吗?
【解决方案3】:

鉴于缺乏细节,这是一个相当复杂的问题。如果您只需要对几个表/列进行简单搜索,那么一个(杂乱的)搜索 SP 可能对您来说就足够了。

也就是说,如果您需要更多功能,例如:

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

那么您可能想要查看全文搜索(这是 MS Sql 2000 及更高版本的一部分)。加快全文搜索速度的初始投资可能会有些抵消,但与实现上述功能相比,您可能会为自己节省大量时间和精力。

这里有一些全文搜索链接可以帮助您入门:

希望对您有所帮助。

【讨论】:

    【解决方案4】:

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

    “微软华盖茨”

    并调出一个结果列表,其中包含“gates”、“microsoft”和“washington”的结果。

    Lucene 似乎很酷。

    【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2013-05-25
      • 2010-10-17
      • 1970-01-01
      • 2021-04-24
      • 2016-05-23
      • 2016-09-06
      • 2014-03-26
      • 2016-08-21
      相关资源
      最近更新 更多