Full-Text-Search
如何將數據庫與外部全文引擎同步?
如何使外部全文引擎(Lucene、Solr 等)與數據庫數據保持同步?例如,跟踪插入、刪除、更新。
我目前的解決方案涉及對修改記錄的大聯合所有查詢,Lucene 每隔幾分鐘就會輪詢一次。
有更好的解決方案嗎?
謝謝!
- 使用像 PostgreSQL 這樣內置全文搜尋的數據庫。
- 使用 Hibernate 及其夥伴 Hibernate Search 之類的工具。當您在數據庫中插入/更新/刪除記錄時,Hibernate Search 將為您插入/更新/刪除您的 lucene 索引。
取決於您的數據庫引擎。例如,在 Microsoft SQL Server 中,有幾個數據庫引擎功能可以跟踪哪些行已更改,然後您可以在定期查詢中僅獲取這些行。
我見過的另一種技術是在要搜尋的表上添加一個 UpdatedDateTime 欄位。使用目前日期/時間的預設值,並添加更新觸發器,以便每當更新記錄時,將 UpdatedDateTime 重置為目前日期/時間。請記住,您可能想要索引該欄位,因為您將經常查詢它。然後,在您的應用程序中,只需輪詢已更新日期時間 > 上次更新時間的所有記錄。
如果您採用後一種方法,您可能希望定期進行完整的重新填充,以捕捉輪詢應用程序在一段時間內失敗的任何錯誤。