2016-05-16 49 views
0

我在使用PostgreSQL進行關係數據存儲的Web應用程序中進行全文搜索的策略如下。比如我會拿Invoices表。如何在關係數據更改時更新PostgreSQL全文搜索字段

  1. 在表中我有一個附加字段ALTER TABLE invoices ADD COLUMN tsv tsvector上全文搜索查詢這樣... WHERE tsv @@ to_tsquery('query:*') ...

  2. 做到在每一個全文檢索表我樹立了一個UPDATE觸發器上更新tsv場記錄的每一個變化。更新集合並將來自不同字段的數據連接到tsv字段,設置權重等等。

  3. 設置到tsv字段中的數據也可以是來自其他表的關係數據。從例如表invoicesclient_id領域,但因爲我想通過客戶端名稱來搜索發票以及我還包括在invoices.tsvclients.client_name數據

我的問題是什麼,是保持關係的最佳策略數據在tsv選擇器中同步。在上面的情況 - >如果客戶名稱更改我需要更新這字段中的每個發票...

我應該設置cron作業設置每晚會這樣做嗎?它也可以使用觸發器完成,但是由於我的數據庫模式非常大,如果觸發器遍佈各處,我很害怕它可能會失去控制。

回答

1

如果您將客戶端名稱添加到tsv字段中,結果會更復雜。您可能需要查看this article中提到的Materialized視圖。這種折衷可能是顯示結果的速度以及定期刷新視圖的必要性。從Postgres 9.4開始,你現在可以同時刷新一個視圖。

你可以做的另一件事是在客戶表中創建一個更新觸發器,當有更新時它也會更新發票表中的數據。

相關問題