寻找SQL Server系统范围的搜索解决方案

时间:2016-02-11 20:39:23

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

我尝试创建一个解决方案,允许我的用户在我的数据库中执行类似谷歌的搜索记录。通过这种方式,我的意思是他们可以在不指定列的情况下以各种方式搜索数据。以下是了解我的结构和规格的几点。

  • 用户应该可以搜索任何关键字
  • 数据将通过内部联接来自多个表
  • 数据不断变化,搜索结果必须是实时的

以下是我今天如何实现这一目标:

每当记录或相应记录发生变化时,我们会在searchindex表中创建一条记录,其中包含与该记录关联的所有相关关键字。例如,库存记录将包含已连接表的收据编号,订单编号,库存状态等。 searchindex表使用SQL Server全文索引编制索引,效果非常好。

问题:

当前设置的问题是我们必须维护searchindex表中的数据。这意味着每当我们的代码中任何数据发生变化时,我们都需要调用存储过程来更新searchindex。由于我们的应用程序的复杂性,这太麻烦而且经常失败。

我想实现更流畅的解决方案,以便searchindex始终保持最新状态。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用视图来消除对必须不断更新的单个表的需要。类似的东西:

CREATE VIEW Full_Search
AS
    SELECT invoice_number AS search_text, 'Invoices' AS table_name, 'invoice_number' AS column_name, invoice_id AS id
    UNION ALL
    SELECT part_number AS search_text, 'Parts' AS table_name, 'part_number' AS column_name, part_id AS id
    ...

然后,您可以搜索视图以查找匹配的表格,列和行。这依赖于所有具有单个列PK的表,以便它们可以混合在一起。

性能在很大程度上取决于搜索的完成方式。如果搜索允许使用索引(例如,没有WHERE search_text LIKE '%value%'),那么性能可能不会那么差。