2012-11-06 56 views
0

我試圖將多個數據庫索引到一個solr索引中。我一直在閱讀多個數據源上的solr wiki,並嘗試用不同的設置來擺弄,但我無法獲得理想的效果。如何使用db-data-config.xml配置solr以索引多個來源的文檔

我的配置是這樣的:

<dataConfig> 
    <!-- Has 10000 items --> 
    <dataSource name="ds1" driver="org.h2.Driver" url="jdbc:h2:file:/path/to/first" /> 
    <!-- Has ~7000 items --> 
    <dataSource name="ds2" driver="org.h2.Driver" url="jdbc:h2:file:/path/to/second" /> 

    <document name="myDocName"> 
    <entity name="firstEntity" rootEntity="true" 
      dataSource="ds1" query="SELECT * FROM BLAH" 
      transformer="my.Transformer" threads="4"> 
     ... <!-- field configuration here --> 
    </entity> 

    <entity name="secondEntity" rootEntity="true" 
      dataSource="ds2" query="SELECT * FROM BLAH" 
      transformer="my.Transformer" threads="4"> 
     ... <!-- field configuration here --> 
    </entity> 
    </document> 
</dataConfig> 

現在,我們目前正與TESTDATA工作,所以我不知道有多少記錄有每個數據庫中,第一個包含〜7000和第二10000。當我開始索引我得到一個信息消息,有〜17000補充說:

INFO: {deleteByQuery=*:*,add=[5, 1, 2, 6, 7, 4, 8, 3, ... (17069 adds)],commit=} 0 

然而,當我運行*:在Web界面*查詢我只得到10000項(這是數完全項目在最大的分貝。這似乎表明7096文件hav e到那裏的實體,而剩下的只有一個。

我試圖在配置文件中設置文檔元素,但這導致只有一個被導入(可能是因爲具有相同的名稱,即文檔名稱=「myDocName」對於兩個文檔元素的配置完全相同)。

在這一點上,我卡住了,不知道如何正確配置這一點。我唯一可以想到的是,我必須分別爲兩個數據庫建立索引,但這個工作流程對我來說也不完全清楚。任何幫助,將不勝感激。

更新1:我試圖給兩個實體不同的名稱(根據文檔要求的東西),但是這會導致以下行爲。首先從第一個數據庫中添加文檔,然後用第二個數據庫中的文檔覆蓋前N個現有文檔,其中N是第二個數據庫中的記錄數。顯然這不是我想要的,我想要N 額外的文件。在配置中添加第二個文檔元素似乎也不起作用。

更新2:根據此錯誤報告中的註釋:https://issues.apache.org/jira/browse/SOLR-895,文檔標記中的根實體應導致這些實體的新文檔。這不是我正在發生的事情。在每個實體標籤上設置rootEntity =「true」並不會改變任何內容。結果仍然是,導入後我只有10000個文件,而不是預期的17000.

回答

2

我想你有唯一的鍵衝突。你在兩個不同的數據庫中有相同的ID嗎?請嘗試更改查詢

- ds1 - "SELECT "ds1" || id AS id, field1, field2 FROM table1" 
- ds2 - "SELECT "ds2" || id AS id, field1, field2 FROM table2" 

我會刪除多線程選項(線程=「4」),還有在單線程的情況下,沒有真正顯著的性能改進,它不是真正的穩定(這是在4.0版本中刪除)。

+0

是的,情況正是如此。感謝您指出了這一點。有兩個不同的數據庫由我們擁有的工具生成,id字段只是自動遞增的兩個dbs,所以確實重疊的id。通過在db中使用另一個字段來修復,這在兩個dbs中是真正唯一的。 –