2013-03-26 28 views
2

對於在Solr中執行增量更新,last_index_time(存儲在dataimport.properties中)與數據庫中的日期/時間戳列進行比較。在增量導入期間日期/時間戳的其他替代方案

是否有可能在Solr的配置,使:

  • 我們使用一些列(比如一個「身份證」,這依次增加)的數據庫,而不是日期/時間戳記?
  • last_index_id存儲在dataimport.properties中而不是last_index_time?
  • 在delta-import期間,我們可能會使用像'這樣的條件,其中id> dataimporter.last_index_id'

在此先感謝!

回答

3

我相信你的用例是你有一個帶有自動增量主鍵的僅附加表格的地方。 Solr DIH似乎不支持你想要的。 (儘管詢問Solr用戶郵件列表。)

但是,有一種替代方法可以嘗試使用Solr Wiki DataImportHandlerDeltaQueryViaFullImport中給出的示例。如果您可以將Solr索引中最大的id作爲參數傳遞給導入請求,則可以在數據導入查詢中使用該參數。

爲此,您需要先發出一個查詢到Solr,以獲取最大的ID:

q=*:*&sort=id desc&rows=1&fl=id 

調用此MAXID。然後,當你打電話給你的全進口通過這個ID,如:

/dataimport?command=full-import&id=MAXID 

你可以使用${dataimporter.request.id}在您的數據配置的ID請求PARAM。 在您的數據-config.xml中查詢應該是這樣的:

<entity name="item" 
     pk="id" 
     query="SELECT id, name FROM item 
       WHERE id > '${dataimporter.request.id}'"> 

當然,做您所有的文件完全重新索引,您將通過id=0,假設0是你得到了最小鍵值。

還沒有嘗試過這個,但是你可以嘗試並告訴你發現了什麼。如果你使用的是MySQL,你可以保留時間戳列爲DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,甚至不用麻煩自己更新它。)

(這樣說的話,顯然很容易在表中添加時間戳列。
+0

好的想法!我完全同意「時間戳」是最好的選擇,因爲我們也可以處理更新。只是尋找替代品!不管怎麼說,還是要謝謝你! – Mavellin 2013-04-01 03:37:26