2013-03-27 81 views
0

這可能是一個微不足道的問題,但我試圖追加到現有的Solr索引,似乎每次都會覆蓋那裏。我有兩個數據庫,我從中獲取數據,我可以從每個數據庫單獨導入數據,但是當我從一個數據導入數據,然後立即從第二個數據導入數據時,第一個數據將被覆蓋。我在我的db-config.xml文件中映射了兩個dataSources,並且使用標準的管理界面來運行導入。我的配置文件看起來像這樣。追加到索爾索引

<dataConfig> 
    <dataSource 
    name="ds-1" 
    type="JdbcDataSource" 
    driver="Driver" 
    url="jdbc_url1" 
    user="user1" 
    password="pass1"/> 

<dataSource 
    name="ds-2" 
    type="JdbcDataSource" 
    driver="Driver" 
    url="jdbc_url2" 
    user="user2" 
    password="pass2"/> 

    <document> 

<entity name="entity1" dataSource="ds-1" query="SELECT YYY FROM TABLE"> 
     ... 
    </entity> 

<entity name="entity2" dataSource="ds-2" query="SELECT ZZZ FROM TABLE"> 
     ... 
    </entity> 

    </document> 
</dataConfig> 

我該怎麼做才能防止原始索引被覆蓋。我想隨時逐漸添加來自各種不同來源的數據,因此讓我的索引得到清除,現在我的表現很好。

回答

1

您的問題是您可能將索引文檔的關鍵字定義爲數據庫中的主鍵ID,並且這些值是重疊的。爲了防止這種情況,您需要爲Solr指定一個唯一的ID。通常,當我過去遇到過這個問題時,我使用了一個字符串字段作爲id字段,並將一個或兩個字符附加到數據庫中的id以使其唯一。示例:來自產品表的項目將具有像P1,P2等的ID,並且來自訂單表的項目將具有像O1,O2等的ID。

您應該能夠使用數據導入處理程序TemplateTransformer來幫助完成此操作爲你。

+0

嘿,謝謝@Paige Cook ...我有一個id字段,它是每個數據庫中每條記錄的唯一ID。我應該在標籤中將該字段指定爲「pk」類型嗎? – aeupinhere 2013-03-27 16:03:21

+2

呃......我在兩個數據庫中命名這個字段是相同的,所以方面名稱是相同的。它一直在正常工作。感謝您的快速回復! – aeupinhere 2013-03-27 16:15:33