Full-Text-Search

如何將數據庫與外部全文引擎同步?

  • April 28, 2013

如何使外部全文引擎(Lucene、Solr 等)與數據庫數據保持同步?例如,跟踪插入、刪除、更新。

我目前的解決方案涉及對修改記錄的大聯合所有查詢,Lucene 每隔幾分鐘就會輪詢一次。

有更好的解決方案嗎?

謝謝!

  1. 使用像 PostgreSQL 這樣內置全文搜尋的數據庫。
  2. 使用 Hibernate 及其夥伴 Hibernate Search 之類的工具。當您在數據庫中插入/更新/刪除記錄時,Hibernate Search 將為您插入/更新/刪除您的 lucene 索引。

取決於您的數據庫引擎。例如,在 Microsoft SQL Server 中,有幾個數據庫引擎功能可以跟踪哪些行已更改,然後您可以在定期查詢中僅獲取這些行。

我見過的另一種技術是在要搜尋的表上添加一個 UpdatedDateTime 欄位。使用目前日期/時間的預設值,並添加更新觸發器,以便每當更新記錄時,將 UpdatedDateTime 重置為目前日期/時間。請記住,您可能想要索引該欄位,因為您將經常查詢它。然後,在您的應用程序中,只需輪詢已更新日期時間 > 上次更新時間的所有記錄。

如果您採用後一種方法,您可能希望定期進行完整的重新填充,以捕捉輪詢應用程序在一段時間內失敗的任何錯誤。

引用自:https://dba.stackexchange.com/questions/13508