2016-02-11 43 views
-1

我想創建一個解決方案,以允許我的用戶在我的數據庫中執行谷歌般的搜索記錄。這意味着他們可以通過多種方式搜索數據,而無需指定列。這裏有幾點要了解我的結構和規格。尋找一個SQL Server系統範圍的搜索解決方案

  • 用戶應該能夠搜索任何關鍵詞
  • 的數據將通過內來自多個表的連接
  • 的數據是不斷變化的,搜索結果必須是實時的

以下是我今天所做的工作:

每次記錄或相應記錄發生變化時,我們都會在searchindex表中創建一條記錄,其中包含所有相關的關鍵字s與該記錄相關聯。例如,庫存記錄將包含收據編號,訂單編號,庫存狀態等,以便爲聯合表格添加。 searchindex表使用SQL Server全文索引編制索引,並且工作得很好。

問題:

當前設置的問題是,我們必須保持在searchindex表中的數據。這意味着每當我們的代碼中的任何數據發生變化時,我們都需要調用存儲過程來更新searchindex。由於我們的應用程序的複雜性,這太麻煩了,並且經常失敗。

我想實現更流暢的解決方案,以便searchindex始終保持最新。

任何想法?

謝謝。

+0

絕對沒有辦法讓你滿意這種類型的搜索。你基本上是問有沒有辦法通過搜索每個表的每一列來找到一個特定的值,並且你希望它快。這就像是要求某人在加利福尼亞州的所有電話簿中找到名爲「史蒂夫」的所有事件。它可以完成,但它不會很快。 –

+2

我建議保留您當前的解決方案,並在非高峯時段每天更新一次searchindex表。 –

+0

@SeanLange我並不是要求每一列都是可搜索的。只有少數幾個,但他們在不同的表 – btorkelson

回答

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%'),那麼性能可能並不那麼糟糕。