2011-01-06 48 views
0

我正在使用DataImportHandler索引SOLR中的數據。我使用完全導入來索引我的數據庫中大約10000個產品的所有數據。現在,我對增量導入使用情況感到困惑嗎?它是否索引添加到數據庫中的新數據的時間間隔,我的意思是它將索引添加到我的表的新數據大約10行,或者它只是更新已經索引的數據中的更改。Solr DataImportHandler delta import

任何人都可以請它簡單的例子,只要你能向我解釋。

回答

4

的DataImportHandler可有點令人生畏。您的初始查詢已加載10.000個獨特產品。如果您指定/ dataimport?command = full-import,則會加載該文件。 完成此導入後,DIH會存儲變量({dataimporter.last_index_time}),該變量是您最後一次執行此導入的日期/時間。

爲了進行更新,您需要指定一個deltaQuery。 deltaQuery旨在識別自上次更新以來數據庫中發生更改的記錄。因此,您可以指定一個如下所示的查詢:SELECT product_id FROM sometable WHERE [date_update]>'$ {dataimporter.last_index_time}' 這將從數據庫中檢索自上次完全更新以來更新的所有product_id。您需要指定的下一個查詢(deltaImportQuery)是將從上一步檢索每個product_id的完整記錄的查詢。

假設的product_id是你唯一的密鑰,Solr的會找出需要更新現有記錄,或添加一個,如果PRODUCT_ID好好嘗試的工作。

爲了執行deltaQuery並使用/ dataimport?命令=增量導入

這是所有的可能性大大簡化,檢查DataImportHandler Solr的維基,它是一個非常強大的工具deltaImportQuery !

+0

[date_update]時間戳存儲在數據庫中嗎?如果是這樣,當數據庫服務器的日期與安裝SOLR的服務器不完全同步時,這不會產生問題嗎? – mrd3650 2011-12-27 09:57:05

0

我同意數據導入處理程序可以處理這種情況。 DIH的一個重要限制是它不排隊請求。這樣做的結果是,如果DIH「忙」索引,它將忽略所有未來的DIH請求,直到它再次「空閒」。跳過的DIH請求丟失並未執行。

3

在另一方面:

當你使用一個小的時間窗口內的增量導入(如在幾秒鐘幾次)和數據庫服務器是其它機比Solr的索引服務上,使確保兩臺機器的systemtime相匹配,因爲在數據庫服務器上生成了[date_update]的時間戳,另一個生成了dataimporter.last_index_time

否則,你將不會被更新取決於時間的差異指數(或太多)。