2009-12-22 42 views
6

我的Solr數據源是一個SQL數據庫,其中主鍵是複合的(即它是兩個字段)。Solr DIH delta-import複合主鍵?

這對我的主要DIH query很好,我只是連接字段,併成爲我的Solr主鍵。然而,從文檔中我不清楚如何編寫增量導入查詢來支持這一點。

文檔建議我需要兩個查詢 - 一個查找已更改行的主鍵,另一個查詢然後實際檢索與每個鍵相對應的單個文檔。雖然沒有例子顯示覆合鍵。

理想我不希望這兩個單獨的查詢的話,那會少放負載的數據庫上,如果這兩個查詢簡單地組合,使得querydeltaQuery之間的唯一區別是WHERE條款基於該過濾器在last_changed

所以,如果我的主要query是:

SELECT key1 || key2 as pk FROM table 

將在相關deltaQuery(和/或deltaImportQuery)是什麼樣的?

我試着只是添加WHERE子句,但在查詢運行後,我收到了有關缺少deltaImportQuery的警告,然後出現空指針異常。

回答

-1

有兩個查詢deltaImport。第一個(deltaQuery)用於確定要索引的內容。例如,在其中我們可以定義我們需要索引的ID。另一個是從這個ID確定數據。看看我的例子,希望it`ll幫助您:

<entity name="address" pk="address_id" query="SELECT * FROM address a" deltaImportQuery="SELECT * FROM address a where a.address_id > ${dataimporter.delta.id}" 
      deltaQuery="select address_id as id from address where address_id=101010"> 

deltaImportQuery的重要組成部分,爲$ {} dataimporter.delta.id。這是我們如何將我們的ID從deltaQuery設置爲deltaImportQuery。

+0

謝謝,但你真的讀過這個問題嗎? – Alnitak 2009-12-23 09:40:03

+0

當然,在你編輯它之前。 – Yurish 2009-12-23 09:56:37

+0

其實我從來沒有編輯過它... – Alnitak 2009-12-24 12:02:45

0

設置你的deltaQuery在where子句中的 「選擇1」,這將觸發deltaImportQuery 然後只寫你deltaImportQuery用 '$ {} dataimporter.last_index_time'

所以deltaQuery = 「選擇1」 deltaImportQuery = 「從a_table選擇*,其中LASTUPDATED> '$ {dataimporter.last_index_time}'」

3
query="SELECT key1 || key2 as id, ...other fields FROM table" 

deltaImportQuery="SELECT key1 || key2 as id, ... other fields 
        FROM table 
        where key1 = '${dataimporter.delta.key1}' 
        and key2 = '${dataimporter.delta.key2}'" 

deltaQuery="SELECT key1 || key2 as id, key1, key2 
      FROM table 
      WHERE lastUpdated > '${dataimporter.last_index_time}'" 

假設KEY1和KEY2是文本。例如,如果key2是數字,則不需要$ {dataimporter.delta.key2}周圍的單引號。