2009-10-12 79 views
16

我正在使用Solr爲我的webapp進行搜索,我認爲最好使用DataImportHandler來處理通過數據庫與應用程序同步。我喜歡只是檢查last_updated_date字段的優雅。好東西。但是,我不知道如何使用這種方法處理刪除文檔。我看到它的方式有兩種選擇。當文檔被刪除時,我可以從客戶端向Solr發送明確的消息,或者我可以添加一個「已刪除」標誌並將該對象留在數據庫中,這樣Solr就會注意到文檔已經更改並且現在被「刪除「。我可以添加一個查詢過濾器,它將忽略已刪除標誌的結果,但在Lucene索引中包含所有已刪除的文檔似乎效率低下。其他人做什麼?Solr DIH - 如何處理刪除的文檔?

回答

20

這是你的選擇:

  • 使用DIH special commands $ deleteDocById或$ deleteDocByQuery(需要Solr的1.4+)
  • 使用DIH的clean parameter導入之前刪除整個索引。
  • 使用preImportDeleteQuery來定義在導入之前要清理的內容。 (需要Solr 1.4+)
  • 使用數據庫觸發器代替DIH來管理更新索引。
  • 如果您使用某種ORM,則使用其截取功能而不是DIH。例如,您可以使用hibernate events更新更新,插入或刪除索引。
+0

這是一個很好的列表!我仍然使用1.3,但這是一個令人信服的理由來研究切換。 – 2009-10-13 19:40:16

+0

是的,Solr 1.4剛剛去了RC,最終版本即將推出。 – 2009-10-15 15:29:00

+0

您好Mauricio,有沒有什麼好的例子如何使用preImportDeleteQuery時,刪除文件進行delta導入? – Joyce 2011-01-11 22:55:40

2

我喜歡有一個「刪除」標誌,所以我並沒有真正刪除我的數據!取決於你是多麼偏執。我喜歡毛裏西奧的建議...

+0

「已刪除」標誌=良好的通話! – Brian 2009-10-15 15:25:55